Launcher3源碼解析

由於工作的原因,開始了Launcher的學習和開發。我拿到的源碼是Android N 的Launcher3的源碼。想的是一步一步對Launcher3的源碼進行分析並記錄,也是爲了讓自己遺忘的時候可以看看。

下面正式開始Launcher3的源碼分析,首先介紹一下主要的幾個類:

Launcher:主界面Activity,最核心且唯一的Activity。

LauncherAppState:單例對象,構造方法中初始化對象、註冊應用安裝、卸載、更新,配置變化等廣播。這些廣播用來實時更新桌面圖標等,其receiver的實現在LauncherModel類中,LauncherModel也在這裏初始化。

LauncherModel:數據處理類,保存桌面狀態,提供讀寫數據庫的API,內部類LoaderTask用來初始化桌面。

InvariantDeviceProfile:一些不變的設備相關參數管理類,其內部包涵了橫豎屏模式的DeviceProfile。

WidgetPreviewLoader:存儲Widget信息的數據庫,內部創建了數據庫widgetpreviews.db。

LauncherAppsCompat:獲取已安裝App列表信息的兼容抽象基類,子類依據不同版本API進行兼容性處理。

AppWidgetManagerCompat:獲取AppWidget列表的兼容抽象基類,子類依據不同版本API進行兼容性處理。

LauncherStateTransitionAnimation:各類動畫總管處理執行類,負責各種情況下的各種動畫效果處理。

IconCache:圖標緩存類,應用程序icon和title的緩存,內部類創建了數據庫app_icons.db。

LauncherProvider:核心數據庫類,負責launcher.db的創建與維護。

LauncherAppWidgetHost:AppWidgetHost子類,是桌面插件宿主,爲了方便託拽等才繼承處理的。

LauncherAppWidgetHostView:AppWidgetHostView子類,配合LauncherAppWidgetHost得到HostView。

LauncherRootView:豎屏模式下根佈局,繼承了InsettableFrameLayout,控制是否顯示在狀態欄等下面。

DragLayer:一個用來負責分發事件的ViewGroup。

DragController:DragLayer只是一個ViewGroup,具體的拖拽的處理都放到了DragController中。

BubblTextView:圖標都基於他,繼承自TextView。

DragView:拖動圖標時跟隨手指移動的View。

Folder:打開文件夾展示的View。

FolderIcon:文件夾圖標。

DragSource/DropTarget:拖拽接口,DragSource表示圖標從哪開始拖,DropTarget表示圖標被拖到哪去。

ItemInfo:桌面上每個Item的信息數據結構,包括在第幾屏、第幾行、第幾列、寬高等信息;該對象與數據庫中記錄一一對應;該類有多個子類,譬如FolderIcon的FolderInfo、BubbleTextView的ShortcutInfo等。
 

Launcher界面的劃分如圖

Launcher啓動主流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章