App Widget的使用跟实现

App Widget的使用和实现

App Widget的使用和实现

APP Widget俗称桌面小工具,内嵌在其他宿主应用中定期提供本应用内容的视图工具。是想用户提供其应用信息和操作的窗口。

与快捷方式相比,APP Widget会占据更多的桌面交互空间,承载丰富的信息,提供更便捷的操作入库,提升用户体验。如天气小工具、电量小工具。

   

AndroidAPP 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 ServiceAPP 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对象,同时通过AppWidgetHostAPP 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