Android Launcher启动过程

Launcher的启动流程:

1.Zygote进程 --> SystemServer进程 --> startOtherService方法 --> ActivityManagerService的systemReady方法 --> startHomeActivityLocked方法 --> ActivityStackSupervisor的startHomeActivity方法 --> 执行Activity的启动逻辑,执行scheduleResumeTopActivities()方法。。。。

2.因为是隐士的启动Activity,所以启动的Activity就是在AndroidManifest.xml中配置catogery的值为:

public static final String CATEGORY_HOME = "android.intent.category.HOME";

可以发现android M中在androidManifest.xml中配置了这个catogory的activity是LauncherActivity,所以我们就可以将这个Launcher启动起来了

3.LauncherActivity中是以ListView来显示我们的应用图标列表的,并且为每个Item保存了应用的包名和启动Activity类名,这样点击某一项应用图标的时候就可以根据应用包名和启动Activity名称启动我们的App了。

> 安装APP包的流程

PMS 解析Manifest流程:Zygote进程 --> SystemServer进程 --> PackgeManagerService服务 --> scanDirLI方法 --> scanPackageLI方法 --> PackageParser.parserPackage方法;

> UILoop消息线程

UI线程的ActivityTread中的Main方法已经使用Looper.prepareMainLooper为该线程添加了Looper对象,即已经为该线程创建了消息队列MQ,而普通线程Thread只是一个裸线程而已(可以联想一下AsyncTask将普通线程变为LOOP线程的过程)。从ActivityThread的Main()------>ActivityThread----- UILoop循环处理:

(1)首先ActivityThread的Main()执行,调用调用prepareMainLooper()为UI线程创建消息队列(MessageQueue),

(2)然后创建一个ActivityThread对象,期间会创建俩个对象Handler(处理消息队列),ApplicationThread(Binder)对象(接收远程Ams的IPC调用)

(3)UI主线程调用Looper.loop()进入消息循环体,当接收到Ams发送start某个Activity后将会创建指定的Activity对象,Actvity又会依次创建创建PhoneWindow类,DécorView类,创建View/ViewGroup

(4)最后调用WindowManager类(创建好的界面显示到屏幕)

> 点击Logo启动APP(AMS,ActivityThrad)

ActivityThrad创建进程,fork进程的复制,SystemThread? ActivityThread和ApplicationThread?

在android.app包下有Instrumentation这个类,这个类没有继承和实现其它的任何类,也没被其它的类继承.会在应用的任何代码执行前被实列化,用来监控系统组件与应用的交互过程,其实就是很多操作封装一下,由它来完成实现. Instrumentation另一个重要作用是提供Android组件单元测试.

每一个应用进程中只有唯一的Instrumentation, 在ActivityThread中成员变量Instrumentation mInstrumentation,通过方法public Instrumentation getInstrumentation()来获得.

-- Binder

ActivityManagerProxy与ActivityManagerService是一对Binder;ApplicationThread与ActivityThreadProxy是一对Binder.

App与AMS通过Binder进行IPC通信,AMS(SystemServer进程)与zygote通过Socket进行IPC通信。

在Android系统中,任何一个Activity的启动都是由AMS和应用程序进程(主要是ActivityThread)相互配合来完成的。AMS服务统一调度系统中所有进程的Activity启动,而每个Activity的启动过程则由其所属的进程具体来完成。

Android系统启动流程(四)Launcher启动过程与系统启动流程- http://blog.csdn.net/itachi85/article/details/56669808

Android应用框架浅析- http://blog.csdn.net/yanbober/article/category/3206943

Launcher启动流程- http://blog.csdn.net/qq_23547831/article/details/51112031

相关推荐
Kapaseker11 分钟前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴38 分钟前
Android17 为什么重写 MessageQueue
android
阿巴斯甜21 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android