App Widget的使用和实现
APP Widget俗称桌面小工具,内嵌在其他宿主应用中定期提供本应用内容的视图工具。是想用户提供其应用信息和操作的窗口。
与快捷方式相比,APP Widget会占据更多的桌面交互空间,承载丰富的信息,提供更便捷的操作入库,提升用户体验。如天气小工具、电量小工具。
???
Android的APP Widget框架
APP Widget框架由三部分组成:APP Widget提供应用(APP Widget Provider),负责实现APP Widget的功能和界面,提供APP Widget需要呈现的内容。
APP Widget宿主应用APP Widget Host:负责将来自各个提供应用的APP Widget对象构造并呈现出来。
APP Widget管理服务:将APP Widget提供的应用与APP Widget宿主应用解耦,APP Widget Service。APP Widget管理服务运行于Android核心进程的独立线程内,负责从APP Widget提供的应用收集所有APP Widget信息,并将这个信息提供给APP Widget宿主应用,同事APP Widget管理服务还会帮助APP Widget宿主应用进行APP Widget对象的构造和呈现。
?
??? APP Widget本质是触发器组件,派生自APPWidgetProvider, APPWidgetProvider是触发器组件的子类,用于接收特定的广播事件,捕获与APPWidget相关的创建、更新、销毁信息。
APP Widget提供的应用需要在配置文件中对APPWidget组件信息声明:Receiver。
?
APP Widget的配置信息需要使用<meta-data>拓展域进一步描述APP Widget的详细信息。键值为appwidget-provider
该部分的描述信息会被读取到AppWidgetProvideInfo中,AppWidgetProvideInfo描述了APP Widge的内容更新频率、占据的尺寸、视图的样式。
?
APP Widge管理服务会扫描所有应用提供的APP Widge配置信息,并将这些信息通过AppWidgetManager对象提供给宿主应用。每个宿主应用都需要实现并构造AppWidgetHost,利用AppWidgetHost来构造和管理APP Widge对象,同时通过AppWidgetHost与APP Widge管理服务建立RPC连接,等待APP Widge管理服务发出指令。
?
调用AppWidgetHost.allocateAppWidgetId可以为AppWidget分配一个Widget ID, AppWidget管理服务会统一管理和分配Widget ID,
?
Widget 界面构造与Remote View
APP Widge界面构造和呈现是分离的,APP Widge界面构造在其提供应用中进行,APP Widge界面呈现是在宿主应用内。宿主应用会根据App Widget对象中描述的界面信息,将各个界面控件实例化,并设定好相关联的内容和事件。
??? APP Widge的界面描述信息会通过通过RemoteViews描述。RemoteViews实现了Parcelable接口,可以进行序列化并在提供的应用进程中与宿主进程通讯。在Android系统中,当交互界面的构造和交互界面的实现分离时就需要RemoteViews。