`

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

总结

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结构如下图所示:
Android系列之二十四<wbr>--<wbr>home<wbr>screen

整个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,墙纸。

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

类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更新一下相应view。



在Launcher::onCreate中,函数startLoaders被调用。而该函数接着调用loadApplications和loadUserItems,分别获取系统的应用列表,以及显示在桌面上的对象列表(快捷方式,appwidget,folder等)。

Launcher上排列的所有应用图标由AllAppsGridView对象呈现。这个对象是一个GridView。其对应的Adapter是ApplicationsAdapter,对应的model则是ApplicationInfo数组。数组内容是由ApplicationsLoader装载的。
private class ApplicationsLoader implements Runnable。

分享到:
评论

相关推荐

    android Launcher源码详解

    Android Launcher 是 Android 系统中一个非常重要的组件,负责显示桌面程序和管理应用程序图标。了解 Launcher 的源码可以帮助我们更好地理解 Android 系统的设计思想和实现机制。本文将对 Launcher 的源码进行深入...

    android launcher3源码 循环翻页

    《深入解析Android Launcher3源码:循环翻页机制》 Android Launcher3是Android系统的核心组件之一,它是用户与系统交互的门户,承担着应用程序启动、桌面布局管理等关键任务。本篇文章将深入探讨Launcher3的源码,...

    安卓Android源码——Android Launcher 源码修改可编译.zip

    Launcher是用户与Android系统交互的主要界面,它管理应用程序快捷方式、小部件和其他桌面元素。"源码修改可编译"意味着这份资料包含了已经做过调整,能够成功编译的Launcher源代码,适合开发者学习和定制自己的启动...

    android launcher2源码

    本文将重点解析Android桌面应用Launcher2的源代码,旨在为开发者提供一个深入学习和理解其内部工作原理的窗口。 Launcher2是Android早期版本中的默认桌面应用,它负责展示应用图标、小部件以及处理用户的触摸事件。...

    android手把手教你开发launcher.pdf

    Android Launcher 是 Android 操作系统中的桌面应用程序,负责管理桌面图标、widget 和其他桌面元素。下面我们将一步步指导您如何开发一个自己的 Launcher,並使其替代系统的默认 Launcher。 了解 Android ...

    Android Launcher 桌面分页滑动代码

    首先,我们了解到"Android Launcher 桌面分页滑动代码"涉及到的主要技术点是Android的滚动视图和平铺布局。在Android中,通常使用`ViewPager`组件来实现页面滑动效果,而`ViewPager`会与适配器(如`PagerAdapter`)...

    Android桌面Launcher程序

    Android桌面Launcher程序是Android系统的核心组件之一,它作为用户与设备交互的首要界面,负责展示应用图标、桌面小部件,并处理用户的触摸事件。通过深入理解并编写自己的Launcher程序,开发者可以自定义Android...

    Android应用源码之Android Launcher 桌面分页滑动代码.zip

    这个"Android应用源码之Android Launcher 桌面分页滑动代码"压缩包,显然是为了帮助开发者深入理解Android Launcher的实现原理,特别是关于桌面分页滑动的部分。下面将详细解析这个主题。 一、Android Launcher概述...

    Android Launcher 桌面分页滑动代码.zip

    当你看到“Android Launcher 桌面分页滑动代码.zip”这个压缩包时,我们可以推断这包含了一份实现Android桌面分页滑动功能的源码示例。下面将详细介绍Android Launcher的分页滑动机制及其相关的知识点。 1. **...

    android Launcher2文件夾功能分析

    **Android Launcher2 文件夹功能分析** 在Android操作系统中,Launcher是用户界面的核心组成部分,它扮演着桌面的角色,允许用户启动应用程序、创建快捷方式以及管理主屏幕上的图标布局。`Launcher2`是Android早期...

    Android11 Launcher3

    - **源代码分析**:Launcher3的源代码是开源的,开发者可以从GitHub上的"Launcher3-master"项目获取,通过阅读和理解源码,可以深入学习Android启动器的实现细节。 - **调试工具**:使用Android Studio的调试...

    Android_Launcher应用开发_示例代码.zip

    在Android系统中,Launcher应用程序是用户与设备交互的首要界面,它负责展示并管理应用程序快捷方式、小部件以及主屏幕。本资料包“Android_Launcher应用开发_示例代码.zip”提供了关于如何开发自定义Android ...

    Android高级应用源码-Android Launcher 源码修改可编译.zip

    Android Launcher是系统启动时用户首先看到的界面,它负责显示应用程序快捷方式、小部件以及主屏幕。Launcher作为Android系统的入口,其性能和用户体验至关重要。了解并掌握其源码,对于优化系统响应速度、自定义UI...

    Android 6.0 Launcher3 增加屏幕切换动画

    在Android系统中,Launcher是用户与设备交互的主要入口,它负责显示桌面、应用程序快捷方式以及小部件。在Android 6.0(Marshmallow)版本中,开发者对Launcher3进行了重大改进,其中包括引入了新的屏幕切换动画,...

    android手把手教你开发launcher(AndroidStudio版)

    Android Studio是官方推荐的Android应用开发环境,它提供了强大的代码编辑、调试、性能分析以及应用打包功能。在Launcher应用的开发过程中,Android Studio不仅可以帮助开发者快速搭建项目结构,还可以利用其内置的...

    Android Launcher抽屉类SlidingDrawer的使用

    在Android系统中,Launcher是用户界面的核心组成部分,它负责展示应用程序的快捷方式和主屏幕小部件,让用户体验到个性化和便捷的操作。而SlidingDrawer组件是Android SDK提供的一种交互控件,它允许开发者在界面中...

    Android Launcher 源码修改可编译.zip源码资源下载

    Android Launcher 是Android操作系统的核心组成部分,它是用户与系统交互的初始界面,负责展示应用程序图标、桌面小部件等。本文将深入探讨Android Launcher的源码结构、关键组件以及如何进行修改和编译。 首先,...

    Launcher3_androidlauncher_android开发_

    1. **Launcher 的角色**:Launcher是Android设备上显示应用快捷方式、小部件和主屏幕的程序。它不仅负责显示图标,还处理用户的触摸事件,如启动应用、创建快捷方式等。 2. **Launcher3简介**:Launcher3是AOSP中的...

    Android 4.0 Launcher 可编译代码

    Android 4.0 Launcher 是Android操作系统的一个重要组成部分,它是用户界面的核心组件,负责管理应用程序的启动、布局和交互。在Android 4.0(Ice Cream Sandwich,简称ICS)版本中,Launcher进行了诸多改进,旨在...

Global site tag (gtag.js) - Google Analytics