版權(quán)說明:本文為 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處排截;
注:限于作者水平有限嫌蚤,文中有不對(duì)的地方還請(qǐng)指教
由于工作的原因,開始了Launcher的學(xué)習(xí)和開發(fā)断傲。我拿到的源碼是Android N 的Launcher3的源碼脱吱。想的是一步一步對(duì)Launcher3的源碼進(jìn)行分析并記錄,也是為了讓自己遺忘的時(shí)候可以看看认罩。
下面正式開始Launcher3的源碼分析箱蝠,首先介紹一下主要的幾個(gè)類:
- Launcer 是顯示Launcher的主Activity。我們看到的桌面就是它猜年,是最核心且唯一的Activity抡锈。
- LauncherAppState:?jiǎn)卫龑?duì)象疾忍,構(gòu)造方法中初始化對(duì)象乔外、注冊(cè)應(yīng)用安裝、卸載一罩、更新杨幼,配置變化等廣播。這些廣播用來實(shí)時(shí)更新桌面圖標(biāo)等聂渊,其receiver的實(shí)現(xiàn)在LauncherModel類中差购,LauncherModel也在這里初始化。
- LauncherModel:數(shù)據(jù)處理類汉嗽,保存桌面狀態(tài)欲逃,提供讀寫數(shù)據(jù)庫的API,內(nèi)部類LoaderTask用來初始化桌面饼暑。
- InvariantDeviceProfile:一些不變的設(shè)備相關(guān)參數(shù)管理類稳析,其內(nèi)部包涵了橫豎屏模式的DeviceProfile。
- IconCache:圖標(biāo)緩存類弓叛,應(yīng)用程序icon和title的緩存彰居,內(nèi)部類創(chuàng)建了數(shù)據(jù)庫app_icons.db。
- LauncherProvider:核心數(shù)據(jù)庫類撰筷,負(fù)責(zé)launcher.db的創(chuàng)建與維護(hù)陈惰。
- DragLayer:一個(gè)用來負(fù)責(zé)分發(fā)事件的ViewGroup。
- DragController:DragLayer只是一個(gè)ViewGroup毕籽,具體的拖拽的處理都放到了DragController中抬闯。
- BubblTextView:圖標(biāo)都基于他井辆,繼承自TextView。
- Folder:打開文件夾展示的View溶握。
- FolderIcon:文件夾圖標(biāo)掘剪。
- ItemInfo:桌面上每個(gè)Item的信息數(shù)據(jù)結(jié)構(gòu),包括在第幾屏奈虾、第幾行夺谁、第幾列、寬高等信息肉微;該對(duì)象與數(shù)據(jù)庫中記錄一一對(duì)應(yīng)匾鸥;該類有多個(gè)子類,譬如FolderIcon的FolderInfo碉纳、BubbleTextView的ShortcutInfo等勿负。
- Workspace:顯示Launcher界面的視圖。
- CellLayout:Workspace中顯示多頁劳曹,每一頁就是一個(gè)CellLayout奴愉。
- ShortcutAndWidgetContainer:CellLayout中存放子View(即應(yīng)用圖標(biāo)或小控件)的ViewGroup,即真正包含子View的容器铁孵。
- Hotseat:Workspace下的快捷欄锭硼。
下圖就是Launcher3主界面的示意圖:
下一節(jié)我們開始分析Launcher3的流程。