Launcher(待完善...)

本文详细介绍了Android Launcher的工作原理,包括启动过程、数据加载方式、Widget的创建流程等关键环节,并阐述了Launcher如何管理和显示应用程序快捷方式及Widget组件。

构成

(1)Launcher(主Activity)

(2)WidgetHost 

(3)InstallShortcutReceiver(创建快捷方式Receiver)

(4)InstallWidgetReceiver(创建Widget Receiver)

(5)UninstallShortcutReceiver(删除快捷方式Receiver)

(6)UserInitializeReceiver

(7)Provider (数据库)

    

数据项

(1)ShortcutInfo

(2)WidgetInfo

(3)FolderInfo

(4)ApplicationInfo

(5)WidgetProviderInfo


1.启动主页面 (后台同时启动一个工作线程)


2.异步加载数据

     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)取出数据更新所有屏+Hotseat


Shortcut(Desktop+Hotseat):BubbleTextView

Folder:FolderIcon

(2)应用+Widget提供者(+某些Activity)


Application:PagedViewIcon

WidgetProvider:PagedViewWidget


4.创建Widget

WidgetProvider拖动到桌面


(1)分配WidgetId

(2)绑定Id (只有/system/app/的app有权限直接绑定,其他只能通过ACTION_APPWIDGET_PICK绑定)

(3)绑定成功->更新数据库(创建WidgetInfo),创建HostView(请求RemoteViews,创建HostView)并添加到屏幕

                       ACTION_APPWIDGET_CONFIGURE       

        绑定失败->发送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列表

      发送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,刷新)

      创建WidgetInfo数据项,更新数据库

      Host创建HostView(根据WidgetId获取RemoteViews,创建WidgetView,添加),添加桌面



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值