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:一个imageview。
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实例,例如搜索
Launcher中类的关系,见下图(由于篇幅有限,不能把所有关系一一画出)。
总结
1) Launcher中实现了MVC模式(M:launchermode , V:draglayer ,C: launcher),以此为主线,可以得到Launcher对各个组件管理的细节(如drag的实现)。
2) 如果开始就深入各个实现细节则会发现千头万绪,很难有个清醒的方向。