Widget创建过程(将RemoteViews发给WidgetHost)
創建Widget過程
(1)分配id(用HostId請求分配WidgetId:WidgetHost.allocateAppWidgetId:由WidgetService分配一個WidgetID)
? ? ? WidgetService端:Host列表+WidgetId列表
(2)綁定id(將WidgetId綁定到Provider)
? ? ? WidgetManager.bindAppWidgetId:將WidgetID綁定到WidgetProvider
? ? ? 將WidgetID放入相應WidgetProvider的ID列表
? ? ? 發送Enable(第一次)+Update廣播 ?(Service發送廣播請求RemoteViews)
? ? ? ? ? ??WidgetService.sendEnableIntent 發送Enable廣播
? ? ? ? ? ??WidgetService.sendUpdateIntent 發送Update廣播(WidgetIDs)
(3)Provider發送RemoteViews(接受廣播,創建RemoteViews,再發給Service)
? ? ? WidgetProvider接受廣播,回調onEnable,onUpdate
? ? ? ? ? ? 創建RemoteViews(每一個WidgetID創建一個)
? ? ? ? ? ??WidgetManager.updateAppWidget 將RemoteViews發給WidgetService
(4)Service通知Host
? ? ??WidgetService通過IBinder回調WidgetHost的Callbacks(updateAppWidget,providerChanged,viewDataChanged)
(5)添加到桌面(Host創建View,刷新)
? ? ? WidgetHost主線程調用updateAppWidgetView
? ? ? WidgetHost根據WidgetID取到WidgetHostView,再根據RemoteViews創建View添加到WidgetHostView
總結
以上是生活随笔為你收集整理的Widget创建过程(将RemoteViews发给WidgetHost)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: measure,layout,draw的
- 下一篇: shouldOverrideUrlLoa