1.RemoteViews的构造方法public RemoteViews(String packageName,int layoutId)

第一个表示当前应用的包名(反射机制需要),第二个表示加载的布局文件。

注:RemoteViews不能支持所有View类型。就像下表没有EditTextView,如果在布局文件中则会报错

所支持类型如下:

并提供相应的方法:

二、运作流程

①、RemoteViews通过Binder传送到SystemServer ②、系统根据RemoteViews的包名等信息去得到该应用的资源,之后通过LayoutParams去加载RemoteViews的layout文件  ③、系统会对View执行一系列界面更新任务(任务是由set方法提交的)。注:View所做的更新不是立即执行的,必须等到RemoteViews被加载完成后,才会执行,因为是异步。

扩展:关于③中set传递的任务。当应用每一次调用set方法,就会将一个Action对象添加到RemoteViews中。(Action对象:代表一个View操作,实现了Parcelable方法,系统首先将View操作封装到该对象中,然后通过远程传输到远程进程,远程进程执行Action对象中的方法)。之后通过NotificationManger和AppWidgetManager提交(就是将Action远程传输到远程进程中)

④、远程进程会调用RemoteViews的apply方法对所有action对象进行遍历,调用View的apply()方法。

运行图

三、对其中一个方法的分析

详见P233页,将方法,封装到action中。将action对象封保存在ArrayList中。

P234也,RemoteViews的apply方法:加载RemoteViews中的布局文件,之后通过performApply遍历action对象,并调用其apply方法。

注:通知栏和桌面小插件在初始化界面时候会用apply方法(加载布局并更新界面),reApply(只会更新界面).P236 对方法的应用

P237 ReflectionAction源码:通过反射调用View的方法。

四、RemoteViews的意义(用BroadcastRecevier模拟)

步骤:①、创建两个Activity ②、在第二个Activity中注册BroadcastRecevier ③、第一个Activity将RemoteViews传递给Broadcast,然后Broadcast调用第二个Activity的遍历方法。

P241页的解析(未完成)

RemoteViews的内部机制的更多相关文章

  1. ThreadLocal内部机制及使用方法

    一.介绍ThreadLocal内部机制之前,先简单说明一下其特点及用途: 1.ThreadLocal是单线程内共享资源,多线程间无法共享(即线程A访问不了线程B中ThreadLocal存放的值): 2 ...

  2. 搭建高可用mongodb集群(三)—— 深入副本集内部机制

    在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...

  3. SQL Server 内存中OLTP内部机制概述(四)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  4. SQL Server 内存中OLTP内部机制概述(三)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  5. SQL Server 内存中OLTP内部机制概述(二)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  6. SQL Server 内存中OLTP内部机制概述(一)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  7. LocalActivityManager的内部机制

    LocalActivityManager内部机制的核心在于,它使用了主线程对象mActivityThread来装载指定的Activity.注意,这里是装载,而不是启动,这点很重要. 所谓的启动,一般是 ...

  8. new和instanceof的内部机制

    new和instanceof的内部机制 首先我们来看看obj = new o()这条语句发生了什么: var obj = (function(){ var obj = {}; obj.__proto_ ...

  9. zookeeper 内部机制学习

    zookeeper 内部机制学习 1. zk的设计目标 最终一致性:client不论连接到那个Server,展示给它的都是同一个视图. 可靠性:具有简单.健壮.良好的性能.如果消息m被到一台服务器接收 ...

随机推荐

  1. 如何在jQuery中使用 setInterval,setTimeout

    当遇到setInterval,setTimeout与jquery混用的问题 时,直接按JavaScript中的语法写并不起作用,有以下两种解决方法. 方法1. 直接在ready中调用其他方法,会提示缺 ...

  2. python socket 编程之二:tcp三次握手

    建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手:服务器收到syn包,必须确认客户的SYN(ack ...

  3. HDU 1026 Ignatius and the Princess I(BFS+优先队列)

    Ignatius and the Princess I Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  4. ASP.NET Ajax In Action!

    创建XMLHTTPRequest 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeH ...

  5. abiword Namespace List

    abiword Namespace List Here is a list of all namespaces with brief descriptions: abicollab  这个命名空间以及 ...

  6. JavaScript 之 Cookie

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...

  7. windbg命令详解

      DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll ...

  8. Match类

    Regex在匹配的时候,常常会返回一个Match类的对象,今天就来看看怎么玩这个对象. 一.属性 Captures 按从里到外.从左到右的顺序获取由捕获组匹配的所有捕获的集合(如果正则表达式用 Reg ...

  9. Linux系统编程(22)——响应信号

    进程对信号的响应 进程可以通过三种方式来响应一个信号: 1.忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP: 2.捕捉信号.定义信号处理函数,当信号发生时,执 ...

  10. Family Tree

    Question A traditional constructing tree problem. Given a string to represent relationships, and pri ...