Launcher是Android系統的桌面系統,是比較重要也比較複雜的程序,這裏對其代碼做一個分析,希望起到拋磚引玉的作用。
1. Launcher有什麼? live folder , widget , shortcut , wallpaper ,見 onActivityResult
2. UI 分成 3 部分: workspace, slibingdrawer, deletezone
3. Menu: 見 onCreateOptionsMenu in launcher.java
4. launcher 類是個 activity, 遵循 activity 的生命週期。
5. 資源文件比較多,這裏只關注 Layout 相關的文件
代碼分析的主線:
1. 瞭解類
2. 瞭解類的關係
Launcher工程中的類:
AddAdapter: 維護了 live fold , widget , shortcut , wallpaper 4 個 ListItem , 長按桌面會顯示該列表
AllAppsGridView :顯示 APP 的網格
ApplicationInfo :一個可啓動的應用
ApplicationsAdapter : gridview 的 adapter
BubbleTextView: 一個定製了的 textview
CellLayout: 屏幕網格化
DeleteZone : UI 的一部分
DragController , dragscroller, dragsource, droptarget: 支持拖拽操作
DragLayer :內部支持拖拽的 viewgroup
FastBitmapDrawable :工具
Folder : Icons 的集合
FolderIcon: 出現在 workspace 的 icon 代表了一個 folder
FolderInfo: ItemInfo 子類
HandleView :一個 p_w_picpathview 。
InstallShortcutReceiver , UninstallShortcutReceiver :一個 broadcastrecier
ItemInfo: 代表 Launcher 中一個 Item (例如 folder )
Launcher: Launcher 程序的主窗口
LauncherApplication :在 VM 中設置參數
LauncherAppWidgetHost , LauncherAppWidgetHostView ,: Widget 相關
LauncherModel : MVC 中的 M
LauncherProvider :一個 contentprovider ,爲 Launcher 存儲信息
LauncherSettings: 設置相關的工具
LiveFolder , LiveFolderAdapter , LiveFolderIcon , LiveFolderInfo : livefolder 相關
Search : 搜索
UserFolder , UserFolderInfo :文件夾包含 applications ,shortcuts
Utilities: 小工具
WallpaperChooser :選擇 wallpaper 的 activity
Workspace: 屏幕上的一塊區域
widget : 代表啓動的 widget 實例,例如搜索
總結
1) Launcher中實現了MVC模式(M:launchermode , V:draglayer ,C: launcher),以此爲主線,可以得到 Launcher對各個組件管理的細節(如drag的實現)。
2) 如果開始就深入各個實現細節則會發現千頭萬緒,很難有個清醒的方向。