`
ai_longyu
  • 浏览: 517199 次
社区版块
存档分类
最新评论

android Launcher——启动过程详解

 
阅读更多
一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();
分享到:
评论

相关推荐

    浅谈android性能优化之启动过程(冷启动和热启动)

    Android 应用程序启动优化之冷启动和热启动详解 一、应用程序启动方式 ...了解 Android 应用程序的启动过程对于优化应用程序的性能非常重要,可以根据应用程序的启动方式和启动过程来进行相应的优化处理。

    安卓Android源码——FloatWindowDemo.zip

    2. `ic_launcher-web.png`:这是应用的启动图标,用于设备上显示和识别应用。 3. `.project`:是Eclipse项目配置文件,包含了项目的构建信息、编译设置、构建路径等,对于在Eclipse中打开和理解项目结构至关重要。 ...

    android底层详解启动篇

    【Android底层详解启动篇】 Android系统的底层开发是一个深入且复杂的领域,它涵盖了操作系统、硬件交互、驱动程序以及系统服务等多个方面。本篇文章将基于“eoeAndroid特刊”第21期中的“Android启动流程分析”...

    Android Launch Process(安卓系统启动过程)

    ### Android系统启动过程详解 #### 一、概述 Android系统的启动流程从硬件加电到用户看到可用的应用程序桌面,经过了一系列复杂的过程。本篇文章将详细解释这一过程中的关键步骤及其背后的原理。 #### 二、从硬件...

    Android_开机启动流程

    - [Android启动过程详解](http://blog.csdn.net/basonjiang_sz/category/648399.aspx) Android从Linux系统启动的过程大致分为以下几个步骤: 1. `init`进程启动 2. Native服务启动 3. `SystemServer`启动 4. 应用...

    Android学习总结-Intent详解.doc

    Intent的基本概念源于它的英文原意——"目的、意向、意图",它允许开发者向Android系统表达执行某一操作的意愿。 1. **Intent的类型** - **显式Intent**:直接指定要启动的目标组件,如Activity或Service的完整...

    基于Android的高仿小米launcher(ZAKER)跨屏拖动item.zip

    它模仿了小米手机的主屏幕启动器(launcher)功能,并且实现了ZAKER新闻应用的特色——跨屏拖动item。这意味着用户可以在不同的主屏幕之间通过拖放操作来移动应用程序快捷方式或小部件,增加了用户界面的互动性和...

    android手机启动原理图

    Android系统作为全球最广泛使用的移动操作系统之一,其启动过程涉及到许多复杂的组件和步骤。深入理解Android手机的启动原理对于开发者、系统优化人员以及故障排查者都至关重要。以下将详细解析Android启动流程的...

    HNU编程新技术实务实验三——Android手机拨号器开发

    这个实验项目,"HNU编程新技术实务实验三——Android手机拨号器开发",旨在让学生掌握Android应用的基本构建过程,理解UI设计,以及与系统服务交互的关键技术。湖大的编程新技术实务课程通过此实验,旨在提升学生对...

    Android开机自动运行一个程序教程

    Android系统在启动完成之后会发送一个特定的广播——`ACTION_BOOT_COMPLETED`,其对应的字符串常量为`android.intent.action.BOOT_COMPLETED`。开发者可以通过注册一个广播接收器(`BroadcastReceiver`)来监听这个...

    android工具Hierarchy_Viewer命令详解

    ### Android工具Hierarchy Viewer命令详解 #### 一、概述 Hierarchy Viewer是Android SDK中自带的一款强大的UI设计与检测工具。它位于Android SDK的`tools`目录下,文件名为`hierarchyviewer.bat`。对于Android...

    android源码目录结构

    * bootable:启动引导相关代码,负责 Android 系统的启动过程。 * build:存放系统编译规则及 generic 等基础开发包配置。 * cts:Android 兼容性测试套件标准,用于测试 Android 设备的兼容性。 * dalvik:dalvik ...

    android开发资料大全

    【Android系统原理与开发要点详解】/底层 应用 框架 Android核心分析28篇,强烈推荐android初学者,android进阶者看看这个系列教程 Android应用开发者指南:性能优化 android开发教程合集(推荐新手看下这一季教程)...

    android贪吃蛇

    【标题】"android贪吃蛇" 是一个基于Android平台的移动应用程序开发项目,它复现了经典的电子游戏——贪吃蛇。在这个项目中,开发者利用Android SDK和Java编程语言,构建了一个可以在Android设备上运行的贪吃蛇游戏...

    Android小案例

    ### Android小案例——实现拨打电话功能 在移动应用开发领域,Android因其开源性和灵活性而备受开发者青睐。对于初学者而言,通过实现一些基础且实用的功能是掌握Android开发技能的重要途径之一。本文将以“Android...

    android四大组件PPT学习教案.pptx

    《Android四大组件——Activity详解》 在Android应用开发中,Activity是构成应用程序核心的四大组件之一,它扮演着用户交互界面的重要角色。Activity提供了一个窗口,用户可以通过它与应用程序进行互动,例如打电话...

    Android 通话模块来电和去电流程分析

    在`AndroidManifest.xml`文件中,通过设置`intent-filter`的`action`属性为`main`和`category`属性为`launcher`,确保了应用程序启动时首先显示的是这个Activity。它包含了四个选项卡,分别对应十二键拨号器(`...

    android学习规划

    在探索Android开发的过程中,制定一份合理的学习规划并利用高质量的资源是至关重要的。本文将从应用层、框架层到内核驱动层,详细阐述每个层次的学习重点及推荐的学习资料,帮助你构建全面的Android知识体系。 ####...

    高焕堂android系统架构详细讲解

    《Android系统架构详解——高焕堂视角》 在Android领域,高焕堂先生是一位备受尊敬的专家,他的讲解深入浅出,对Android系统架构的剖析尤为透彻。本篇文章将根据高焕堂先生的观点,详细阐述Android系统的架构,旨在...

Global site tag (gtag.js) - Google Analytics