Launcher(待完善...)
構成
(1)Launcher(主Activity)
(2)WidgetHost?
(3)InstallShortcutReceiver(創(chuàng)建快捷方式Receiver)
(4)InstallWidgetReceiver(創(chuàng)建Widget Receiver)
(5)UninstallShortcutReceiver(刪除快捷方式Receiver)
(6)UserInitializeReceiver
(7)Provider (數(shù)據庫)
? ??
數(shù)據項
(1)ShortcutInfo
(2)WidgetInfo
(3)FolderInfo
(4)ApplicationInfo
(5)WidgetProviderInfo
1.啟動主頁面 (后臺同時啟動一個工作線程)
2.異步加載數(shù)據
? ? ?Shortcut+Widget+Folder(uri?content://com.android.launcher2.settings/favorites?notify=true)
? ? ?Application(mainIntent(ACTION_MAIN+CATEGORY_LAUNCHER)查詢PackageManager)
? ? ?WidgetProvider(AppWidgetManager.getInstalledProviders)+?ACTION_CREATE_SHORTCUT的Activity?->(目前在Launcher.onCreate時同步加載)
3.刷新?
(1)取出數(shù)據更新所有屏+Hotseat
Shortcut(Desktop+Hotseat):BubbleTextView
Folder:FolderIcon
(2)應用+Widget提供者(+某些Activity)
Application:PagedViewIcon
WidgetProvider:PagedViewWidget
4.創(chuàng)建Widget
WidgetProvider拖動到桌面
(1)分配WidgetId
(2)綁定Id (只有/system/app/的app有權限直接綁定,其他只能通過ACTION_APPWIDGET_PICK綁定)
(3)綁定成功->更新數(shù)據庫(創(chuàng)建WidgetInfo),創(chuàng)建HostView(請求RemoteViews,創(chuàng)建HostView)并添加到屏幕
? ? ? ? ? ? ? ? ? ? ? ?ACTION_APPWIDGET_CONFIGURE? ? ? ?
? ? ? ? 綁定失敗->發(fā)送Intent(AppWidgetManager.ACTION_APPWIDGET_BIND)請求第三方綁定 ->綁定成功->
(1)分配id(用HostId請求分配WidgetId:WidgetHost.allocateAppWidgetId:由WidgetService分配一個WidgetID)
? ? ? WidgetService端:Host列表+WidgetId列表
(2)綁定id(WidegetService端將WidgetId綁定到Provider)
? ? ? WidgetManager.bindAppWidgetId(只有/system/app/的app有權限調用,其他只能通過ACTION_APPWIDGET_PICK綁定)
? ? ? 將WidgetID放入相應WidgetProvider的ID列表
? ? ??發(fā)送Enable(第一次)+Update廣播??(Service發(fā)送廣播請求RemoteViews)
? ? ? ? ? ??WidgetService.sendEnableIntent 發(fā)送Enable廣播
? ? ? ? ? ??WidgetService.sendUpdateIntent 發(fā)送Update廣播(WidgetIDs)
(3)Provider發(fā)送RemoteViews(接受廣播,創(chuàng)建RemoteViews,再發(fā)給Service)
? ? ? WidgetProvider接受廣播,回調onEnable,onUpdate
? ? ? ? ? ? 創(chuàng)建RemoteViews(每一個WidgetID創(chuàng)建一個)
? ? ? ? ? ??WidgetManager.updateAppWidget 將RemoteViews發(fā)給WidgetService
(4)Service通知Host
? ? ??WidgetService通過IBinder回調WidgetHost的Callbacks(updateAppWidget,providerChanged,viewDataChanged)
(5)添加到桌面(Host創(chuàng)建View,刷新)
? ? ? 創(chuàng)建WidgetInfo數(shù)據項,更新數(shù)據庫
? ? ? Host創(chuàng)建HostView(根據WidgetId獲取RemoteViews,創(chuàng)建WidgetView,添加),添加桌面
總結
以上是生活随笔為你收集整理的Launcher(待完善...)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Application下)组件(所在的
- 下一篇: 包名是应用的标识