以android-28为基准,总结了一下Application的启动过程,记录下来,方便以后查阅。
Application启动流程图
image
一、Application启动相关的几个类:
ActivityThread:
H
Instrumentation
ApplicationThread
ActivityManger
ActivityMangerService
1.1、ActivityThread
Android application启动的入口类
1.2、H
ActivityThread的内部类,是主线程Handler类,负责处理主线程的所有消息,尤其是App,Activity声明周期相关的Message
class H extends Handler {
public void handleMessage(Message msg) {
if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));
switch (msg.what) {
case BIND_APPLICATION:
AppBindData data = (AppBindData)msg.obj;
handleBindApplication(data);
break;
case EXIT_APPLICATION:
if (mInitialApplication != null) {
mInitialApplication.onTerminate();
}
Looper.myLooper().quit();
break;
}
1.3、Instrumentation
Instrumentation会在应用程序的任何代码运行之前被实例化,它能够允许你监视应用程序和系统的所有交互。
Instrumentation 是在Application被创建前 创建的,他负责Application、Activity的创建,以及application和Activity的所有生命周期。
1.4 ApplicationThread
ApplicationThread 是ActivityThread的内部类,可以视为一个Binder,他的一个重要作用就是,传递给ActivityManagerService,作为ActivityManagerService向当前进程发送消息(