LauncherApplication->onCreate
1.//设置最小堆内存4M
2.//建立应用图标缓存器
3.//建立LauncherModel
4.//注册Intent.ACTION_PACKAGE_ADDED,Intent.ACTION_PACKAGE_REMOVED,Intent.ACTION_PACKAGE_CHANGED事件监听器
LauncherModel作为广播接收器对上面3中事件进行监听
5.//添加对桌面favorites content provider 数据变化监听器
二Launcher->onCreate
1.获取LauncherApplication LauncherModel mIconCache等LauncherApplication初始化的对象
2.新建拖放控制器new DragController(this)
4.//获取桌面组件管理器,启动桌面组件host
5.//从array.hotseats中加载所有的hotseats(热键 如挂机按钮,google浏览器)
6.从launcher.preferences加载本地设置
7.//设置壁纸尺寸宽度=display.getWidth()* WALLPAPER_SCREENS_SPAN,高度=display.getHeight()
8.//加载布局文件
9.//初始化所有控件
10.//从Bundle savedInstanceState获取桌面持久化数据 设置mRestoring = true;
11.如果mRestoring == false,调用LauncherModel加载桌面项 mModel.startLoader(this, true,isLanguageChange);
a.LauncherModel.Loader.startLoader() 代码同步处理
b.新建LauncherModel.Loader.LoaderThread线程并启动线程(桌面项加载,详细见第三步)
12.注册Intent.ACTION_CLOSE_SYSTEM_DIALOGS广播监听
三 桌面项加载 LauncherModel.Loader.LoaderThread.run:新线程执行
1.等待主线程运行结束才开始加载
2.判断是否先加载桌面;loadWorkspaceFirst = cbk != null ? (!cbk.isAllAppsVisible()) : true;
3.loadWorkspaceFirst==true
a.loadAndBindWorkspace()
loadWorkspace():从数据库launcher.db中查询中所有桌面项构造对应类型的ItemInfo对象存入
mItems,mAppWidgets,mFolders列表.
bindWorkspace():
1.laucher.startBinding(),异步调用,在主线程中handle
//do no things
2.laucher.bindItems(),异步调用,在主线程中handle
1.根据ItemInfo对象创建桌面图标view对象
2.获取item.screen, item.cellX, item.cellY, spanX, spanY,
调用workspace.addInScreen添加到对应桌面的cell
1.重新设置桌面图标view 的layoutparam(类型为cellLayout.layoutparam)
2.根据item.screen获取桌面的celllayout对象,也就是workspace下5个用户桌面中的一个
3.调用celllayout.addview方法把桌面图标view对象添加为celllayout的child,也就是为用户桌面添加一个桌面图标
4.桌面图标view对象添加OnLongClickListener=laucher,由laucher负责监听桌面图标view的longclick事件
5.如果桌面图标是DropTarget对象,拖放控制器mDragController添加该view到拖放目的地列表
3.laucher.bindFolders(),异步调用,在主线程中handle
//launcher.mFolders.putAll(mFolders);
4.laucher.bindAppWidget(),异步调用,在主线程中handle
1.获取LauncherAppWidgetInfo的appWidgetId
2.获取AppWidgetProviderInfo appWidgetInfo mAppWidgetManager.getAppWidgetInfo(appWidgetId)
3.根据appWidgetInfo创建桌面组件的view AppWidgetHostView对象
4.调用workspace.addInScreen添加到对应桌面的cell
5.laucher.finishBindingItems(),异步调用,在主线程中handle
mWorkspaceLoading=false
b.loadAndBindAllApps();
如果没有加载apps或者改变了语言设置
loadAllAppsByBatch();
1.//设置package 查询条件Intent.ACTION_MAIN Intent.CATEGORY_LAUNCHER
2.//清空mAllAppsList mAllAppsList.clear();
3.//packageManager 查询所有应用pakages
4.分批次mAllAppsList.add 应用pakages
5.laucher.bindAllApplications()//异步调用
mAllAppsGrid.setApps(apps)
6.若分多个批次加载 laucher.bindAppsAdded()//异步调用
mAllAppsGrid.addApps(apps);
否则
onlyBindAllApps();
1.mAllAppsList.data.clone();
2.laucher.bindAllApplications()//异步调用
mAllAppsGrid.setApps(apps)
4.loadWorkspaceFirst==false
a.loadAndBindAllApps();
b.loadAndBindWorkspace();
分享到:
相关推荐
1. **Android启动器(Launcher)开发**:理解Android Launcher的工作原理,包括布局管理、图标显示、快捷方式创建、应用程序抽屉等功能的实现。 2. **自定义视图和手势识别**:为了实现跨屏拖动,需要对Android的...
在Android系统中,Launcher是用户界面的核心组成部分,它允许用户启动应用程序、管理桌面快捷方式以及自定义主屏幕布局。本文将深入探讨如何在Android中实现Launcher功能,特别是添加快捷方式的部分。 首先,我们...
"基于Android 4.0.3的Launcher2修改"是一个针对Android系统启动器的自定义开发项目,旨在改进默认的用户界面和功能。在Android 4.0.3(冰淇淋三明治)版本中,Launcher2是原生的桌面应用,负责管理应用程序图标、小...
创建自定义的Android Launcher意味着你需要覆盖默认的启动器行为,例如更改桌面布局、添加特殊功能或调整滑动效果。`TestPagedView`可能包含了实现这些自定义功能的关键代码。 8. **权限与安全**: 当开发自定义...
8. **了解源码**:通过分析Launcher2的源代码,你可以学习到Android启动器的工作原理,如如何处理触摸事件、布局管理、数据持久化等。这对于深入理解Android系统和自定义启动器开发非常有帮助。 以上就是关于...
`launcher3`是Android系统默认的主屏幕应用,负责管理桌面图标、小部件和启动器设置。清空`launcher3`数据意味着删除与启动器相关的所有个性化设置和配置,使用户在升级后获得一个全新的启动器体验。 在C#编程语言...
对于开发者而言,探索这个项目不仅可以学习到Android启动器的设计原理,还可以了解到如何运用模糊算法、优化性能、处理触摸事件、集成第三方库等多方面的知识。而对于普通用户,通过安装并自定义Android-Blur-...
虽然现在大多数开发者使用 Android Studio 进行开发,但此项目说明了如何在 Eclipse 环境下编译 `Launcher3`。这需要配置 AOSP(Android Open Source Project)构建环境,并将项目导入 Eclipse,然后通过 ADT...
本压缩包提供的"Android应用源码之Android Launcher 桌面分页滑动代码"是一个深入理解Android Launcher工作原理的好资源,特别是对于想了解如何实现桌面滑动效果的开发者来说,这是非常有价值的参考资料。...
- 文件中还涉及了Launcher UI的组件,包括`DragLayer`、`SearchDropTargetBar`、`AppsCustomizeTabHost`、`WidgetWorkSpace`等,这些是Android启动器用户界面的重要组成部分,用于展示应用程序的图标、拖拽层、搜索...
1. **Blauncher.apk** - 这是Android应用包文件,包含了Car Launcher桌面启动器的软件本身。用户可以通过安装这个APK文件在车机上使用或升级Car Launcher。 2. **Car Launcher桌面启动器自定义配置白痴教程.pdf** -...
在Android系统中,Launcher是用户与设备交互的入口,它是一个桌面应用,负责展示应用程序快捷方式、小部件以及桌面壁纸等。"Android高级应用源码-Android Launcher 桌面分页滑动代码.zip"是一个关于如何实现Android ...
在Android系统中,Launcher是用户界面的核心组成部分,它充当了手机主屏幕,允许用户启动应用、组织快捷方式和小部件。本压缩包“安卓Launcher桌面相关-android桌面拖拽效果.rar”可能包含了一些实现Android ...
这份"Android Launcher 源码修改可编译.zip"的资源包含了一个可编译的Android Launcher源码,对于开发者来说,这是一份非常有价值的参考资料,可以深入理解Android启动器的工作原理,以及如何自定义和优化这个核心...
"launcher学习"这个主题主要涉及的是Android系统的桌面启动器(Launcher)开发,特别是关于launcher2.1的源代码和相关文档。在这个项目中,你将有机会深入理解Android系统的桌面组件是如何工作的,以及如何自定义和...
Android launcher 很细致说明了framework层启动机制
【标题】"AnderWeb-android-packages-apps-Launcher-4458ee4.zip" 是一个特定版本的Android启动器应用的源代码压缩包。这个启动器是Android操作系统中的核心组件之一,它负责管理手机或平板电脑上的应用程序启动、主...
描述"AnderWeb-android_packages_apps_Launcher-4458ee4_Android"虽然简洁,但进一步证实了这与一个自定义或修改过的Android启动器有关。AnderWeb可能是一个开发者或者团队的名称,他们对原生Android的启动器进行了...
- [Android启动过程详解](http://blog.csdn.net/basonjiang_sz/category/648399.aspx) Android从Linux系统启动的过程大致分为以下几个步骤: 1. `init`进程启动 2. Native服务启动 3. `SystemServer`启动 4. 应用...
1. Android启动器的概念及其在系统中的作用。 2. APK文件结构和AndroidManifest.xml的作用。 3. 自定义启动器的开发,包括权限声明、组件管理和UI定制。 4. Android编程语言(如Java或Kotlin)和XML布局文件的使用。...