05. App Widget原理

App Widget 原理

AppWidget 提供方(App)

你自己开发的 app

AppWidgetProvider

AppWidget 显示方(Launcher)

一般是 Launcher

AppWidgetHost

AppWidgetHost 是实际控制 widget 的地方,要注意,widget 不是一个单独的用户界面程序,他必须寄生在某个程序(activity)中,这样如果程序要支持 widget 寄生就要实现 AppWidgetHost。它的主要功能有两个:

RemoteViews 不是真正的 View,只是 View 的描述,而 AppWidgetHostView 才是真正的 View。这里先创建 AppWidgetHostView,然后通过 AppWidgetService 查询 appWidgetId 对应的 RemoteViews,最后把 RemoteViews 传递给 AppWidgetHostView 去 updateAppWidget。

AppWidgetHost 和 AppWidgetHostView 是在框架中定义的两个基类。应用程序可以利用这两个类来实现自己的 Host。Launcher 是缺省的桌面,它是一个 Host 的实现者。

AppWidgetHostView 是真正的 View,但它只是一个容器,用来容纳实际的 AppWidget 的 View。这个 AppWidget 的 View 是根据 RemoteViews 的描述来创建。

Launcher3 对 Widget 的支持

AppWidget 服务方(system_server)

小结

App Widget 时序

AppWidget 的更新过程