Andorid Launcher程序代码分析

简介: Andorid Launcher程序代码分析

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) 如果开始就深入各个实现细节则会发现千头万绪,很难有个清醒的方向。

相关文章
|
Java Android开发
Android核心服务解析篇(三)——Android系统的启动(二)
Android核心服务解析篇(三)——Android系统的启动(二)
367 0
Android核心服务解析篇(三)——Android系统的启动(二)
|
Unix Linux Android开发
Android核心服务解析篇(三)——Android系统的启动(一)
Android核心服务解析篇(三)——Android系统的启动(一)
345 0
Android核心服务解析篇(三)——Android系统的启动(一)
|
Android开发
Android Studio编译JNI时指定CPU种类
Android Studio编译JNI时指定CPU种类
129 0
|
Android开发
【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
307 0
【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
|
网络协议 Android开发
【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
240 0
【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
|
移动开发 Android开发 C++
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(一)
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(一)
146 0
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(一)
|
Android开发
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(二)
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(二)
167 0
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(二)
|
Android开发
【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
211 0
【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
|
Android开发
【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )
【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )
274 0
【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )
|
Shell Android开发
【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )
【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )
281 0
【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )