Anroid开发艺术探索
第五章理解RemoteViews
- RemoteView主要应用与哪方面?通知栏和桌面小部件,两种的大致实现过程
- 自定义通知的实现方法?
- RemoteView和普通VIew有什么不同?实现原理是什么?--------引出反射
- PendingIntent是什么?它和Intent的区别?典型使用场景是什么?支持几种待定意图?(①②③)
- PendingIntent的匹配规则是什么?
- RemoteView常用的构造方法,参数是什么?
- RemoteView大部分set方法是同通过反射来完成的-----反射
- 重点描述remoteview跨进程传输的过程?
- 为什么remoteview不支持所有的view操作?
- remoteview是如何优化大量IPC问题的?(action概念)-----引出IPC通信
- 远程进程如何更新VIew?
- remoteview中有addAction的方法
- Action对象的apply方法就是真正操作View的地方
- apply和reapply的区别?
- Remoteview中只支持发起PendingIntent,不支持onClickListener监听器模式
- 一个应用需要能够更新另一个应用中的某个界面,可以用AIDL实现,但如果更新操作比较频繁,可以使用RemoteVIew进行优化(更具体的实例?)-----!性能优化
个人理解:
- 对AppWidgetProvider实现桌面小部件整个过程的理解:
(1)首先我们在AndroidManifest.xml配置AppWidgetProvider(实际上是BroadcastReceive),必须能够接收“android.appwidget.action.APPWIDGET_UPDATE”这条广播,为什么?猜测:SystemServer进程会对每一个apk应用配置文件进行检查,如果发现可以接收这条广播,就会为应用初始化桌面部件(缩略图等等,进一步的话依据应用的appwidget Info配置文件进行设置)这时候可以进行基本的部件添加,删除操作。
(2)然后是应用自定义的view如何显示在SystemServer中?借用remoteview,他并不是view的子类,而是一个实现了parcalable的类,内部封装了一些方法,面向SystemServer进程获得应用的动作(比如setViewText( ),应用进程传入viewId,方法名,参数,SystemServer进程根据这些信息通过remoteview进行设置【这里设置方法有两种,一种是在SystemServer进程findviewbyid,然后set,一种是通过反射获取。原因??】)。如果要给view设置点击事件,需要pendingIntent,因为这个intent并不是立即触发的(也就是并不是在应用进程中马上触发,而是传递给SystemServer进程,在SystemServer进程的点击事件中触发)
(3)remoteview是通过Binder传输的,这样就实现了进程之间的交互
网友评论