设为首页 加入收藏

TOP

Android Launcher总体分析(一)
2014-11-24 11:10:57 来源: 作者: 【 】 浏览:0
Tags:Android Launcher 总体 分析

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 实例,例如搜索


总结


1) Launcher中实现了MVC模式(M:launchermode , V:draglayer ,C: launcher),以此为主线,可以得到 Launcher对各个组件管理的细节(如drag的实现)。


2) 如果开始就深入各个实现细节则会发现千头万绪,很难有个清醒的方向。


Home screen可以说是一个手机的最重要应用,就像一个门户网站的首页,直接决定了用户的第一印象。下面对home screen做一简要分析。

home screen的代码位于packages/apps/Launcher目录。从文件launcher.xml,workspace_screen.xml可获知home screen的UI结构如下图所示:



整个homescreen是一个包含三个child view的FrameLayout(com.android.launcher.DragLayer)。

第一个child就是桌面com.android.launcher.Workspace。这个桌面又包含三个child。每个child就对应一个桌面。这就是你在Android上看到的三个桌面。每个桌面上可以放置下列对象:应用快捷方式,appwidget和folder。

第二个child是一个SlidingDrawer控件,这个控件由两个子控件组成。一个是com.android.launcher.HandleView,就是Android桌面下方的把手,当点击这个把手时,另一个子控件,com.android.launcher.AllAppsGridView就会弹出,这个子控件列出系统中当前安装的所有类型为category.launcher的Activity。

第三个child是com.android.launcher.DeleteZone。当用户在桌面上长按一个widget时,把手位置就会出现一个垃圾桶形状的控件,就是这个控件。

在虚拟桌面上可以摆放四种类型的对象:
1. ITEM_SHORTCUT,应用快捷方式
2. ITEM_APPWIDGET,app widget
3. ITEM_LIVE_FOLDER,文件夹
4. ITEM_WALLPAPER,墙纸。

类AddAdapter(AddAdapter.java)列出了这四个类型对象。当用户在桌面空白处长按时,下列函数序列被执行:
Launcher::onLongClick -->
Launcher::showAddDialog -->
Launcher::showDialog(DIALOG_CREATE_SHORTCUT); -->
Launcher::onCreateDialog -->
Launcher::CreateShortcut::createDialog:这个函数创建一个弹出式对话框,询问用户是要添加什么(快捷方式,appwidget, 文件夹和墙纸)其内容就来自AddAdapter。

类Favorites(LauncherSettings.java)和类LauncherProvider定义了一个content provider,用来存储桌面上可以放置的几个对象,包括shortcut, search和clock等。

类DesktopItemsLoader负责将桌面上所有的对象从content provider中提取。

线程private ApplicationsLoader mApplicationsLoader负责从包管理器中获取系统中安装的应用列表。(之后显示在AllAppsGridView上)。ApplicationsLoader::run实现:
1)通过包管理器列出系统中所有类型为Launcher,action为MAIN的activity;
2)对每一个Activity,
a) 将Activity相关元数据信息,如title, icon, intent等缓存到appInfoCache;
b) 填充到ApplicationsAdapter 中。填充过程中用到了一些小技巧,每填充4(UI_NOTIFICATION_RATE)个activity更新一

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android线程操作AsyncTask的用法 下一篇Android Camera Subsystem 架构(..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)