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被到一台服务器接收 ...
随机推荐
- 读php手册一点点心得(1)
1. 要输出大段文本时,跳出PHP解析模式通常比将文本通过echo或print输出更有效率(手册) 2. note :为了代码的发行及一致性,确保不要使用短标记,短标记仅通过php.ini配置 ...
- python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息
主要是通过os.popen读取命令输出实现的,os.popen启动新的进程,且将外部命令的输出作为文件类型对象返回.不能获得外部命令的返回值.既然是文件对象就可以直接用for in 来读取,代码如下: ...
- HDU 4939 Stupid Tower Defense
dp:枚举red,dp前i 个塔中有j 个蓝塔的最大伤害. 机智的地方:dp前i 个塔的时候可以同时处理n-i 个红塔,这样就少了个循环...(枚举红塔的循环) #include <iostre ...
- Mysql基本类型(五种年日期时间类型)——mysql之二
转自:<MySQL技术内幕:时间和日期数据类型> http://tech.it168.com/a2012/0904/1393/000001393605_all.shtml
- [转载] 50个Android开发人员必备UI效果源码
好东西,多学习! Android 仿微信之主页面实现篇Android 仿微信之界面导航篇Android 高仿QQ 好友分组列表Android 高仿QQ 界面滑动效果Android 高仿QQ 登陆界面A ...
- 《how to design programs》第11章自然数
这章让我明白了原来自然数的定义本来就是个递归的过程. 我们通常用枚举的方式引出自然数的定义:0,1,2,3,等等(etc).最后的等等是什么意思?唯一能把等等从描述自然数的枚举方法中去除的方法是自引用 ...
- tr 替换删除字符
1.关于tr 通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您 ...
- bzoj1864 [Zjoi2006]三色二叉树
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...
- UESTC_How many good substrings CDOJ 1026
Icerain likes strings very much. Especially the strings only consist of 0 and 1,she call them easy s ...
- mongoDB windows reinstall add auth
Mongodb默认启动是不带认证,也没有账号,只要能连接上服务就可以对数据库进行各种操作,这样可不行.现在,我们得一步步开启使用用户和认证. 第一步,我们得定位到mongodb的安装目录.我本机的是C ...