RemoteViews的内部机制
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的内部机制的更多相关文章
- ThreadLocal内部机制及使用方法
一.介绍ThreadLocal内部机制之前,先简单说明一下其特点及用途: 1.ThreadLocal是单线程内共享资源,多线程间无法共享(即线程A访问不了线程B中ThreadLocal存放的值): 2 ...
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
- SQL Server 内存中OLTP内部机制概述(四)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...
- SQL Server 内存中OLTP内部机制概述(三)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...
- SQL Server 内存中OLTP内部机制概述(二)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...
- SQL Server 内存中OLTP内部机制概述(一)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...
- LocalActivityManager的内部机制
LocalActivityManager内部机制的核心在于,它使用了主线程对象mActivityThread来装载指定的Activity.注意,这里是装载,而不是启动,这点很重要. 所谓的启动,一般是 ...
- new和instanceof的内部机制
new和instanceof的内部机制 首先我们来看看obj = new o()这条语句发生了什么: var obj = (function(){ var obj = {}; obj.__proto_ ...
- zookeeper 内部机制学习
zookeeper 内部机制学习 1. zk的设计目标 最终一致性:client不论连接到那个Server,展示给它的都是同一个视图. 可靠性:具有简单.健壮.良好的性能.如果消息m被到一台服务器接收 ...
随机推荐
- information_schema.routines 学习
information_schema.routines 用户查看mysql中的routine信息 1.information_schema.routines 表中的常用列: 1.
- 理解JMS规范中消息的传输模式和消息持久化
http://blog.csdn.net/aitangyong/article/category/2175061 http://blog.csdn.net/aitangyong/article/det ...
- Planner – 项目管理软件
http://www.appinn.com/planner/ Planner 是一款开源.易用.跨平台的项目管理软件.@appinn 二猪用了 OpenProject 几年,现在已经受够了它的各种 ...
- winform datagridview 添加行号。
private void dataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { private ...
- 报LinkageError的原因
LinkageError是一个比较棘手的异常,准确的说它是一个Error而不是Exception.java api对它没有直接的解释,而是介绍了它的子类: Subclasses of LinkageE ...
- html 表格中文字的背景色
- python代码打印行号,文件名
python 获取当前代码行号 import sys print "here is :",__file__,sys._getframe().f_lineno
- 采用标准c进行目录文件遍历
图像处理的时候经常需要对一个目录的所有图像进行处理,遍历文件得c代码: 在windows中需要使用到宽字符. 另外,可以使用opencv封装的目录访问操作,下次给出. // DirTraverse.c ...
- 从3dmax中导入模型到UDK Editor(供个人备忘)
笔记从3dmax中导入模型到UDK Editor 1) 在3dmax中导出 2) 选择FBX格式,保存 3) 在UDK中打开content browser,自己选个pac ...
- Zjnu Stadium(hdu3047带权并查集)
题意:一个300列的无限行的循环场地,a b d代表a,b顺时针相距d的距离,现在给你一些距离,判断是否有冲突,如果有冲突计算冲突的次数 思路:带权并查集 a,b的距离等于b到根节点的距离 - a到根 ...