RemoteViews内部实现机制及应用
一、介绍
RemoteViews是一种特殊的View视图结构,作用是显示并更新其他进程中的View界面;因其实现了Parcelable接口,所以可以实现跨进程通信;典型的应用场景是通知栏和桌面小部件开发(两者均是运行在系统进程中);因其运行在远程的进程中(此处可以理解为系统进程),所以没有办法通过findViewById()获取子控件,但是内部提供了一系列set方法用来更新界面;作为一种特殊的视图结构,RemoteViews支持的View类型有限,类型如下:
1. Layout
FrameLayout、LinearLayout、RelativeLayout、GridLayout
2. View
Button、ImageButton、ImageView、ProgressBar、TextView、ListView、GridView、StackView、AnalogClick、Chronometer、ViewFlipper、adapterViewFlipper、ViewStub。
二、内部机制
1、首先来看一下RemoteViews内部实现机制的原理图(网络图片):
2、RemoteViews的工作流程:
上图中的本地进程假设为我们所开发的程序,远程进程假设成系统进程;本地进程设置好一系列View显示更新的操作,然后转换成一系列Action并将其打包,通过Binder将这些操作传递给系统进程;系统进程获取到Binder后,实现解析包并执行这些Action对象中的操作,最后实现系统进程界面的显示更新。
3、Action说明:
Action是RemoteViews的内部静态抽象类,官方的解释如下:
/**
* Base class for all actions that can be performed on an
* inflated view.
* SUBCLASSES MUST BE IMMUTABLE