framework

导航

ActivityThread的理解

 

1. 进入main方法,初始化MainLooper,主线程Handler,同时初始化ApplicationThread(Binder线程,负责IPC通信)用于和AMS通信交互

2. 通过ActivityManagerProxy与AMS通信,发起attachApplication请求(作用是将ApplicationThread对象与AMS绑定,即让AMS持有ApplicationThreadProxy)

3. AMS发送handleBindApplication请求(初始化Application并调用onCreate方法)和创建Instrumentation以及 scheduleLaunchActivity请求(创建启动Activity)

4. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送BIND_APPLICATION和LAUNCH_ACTIVITY消息

5. 主线程创建Application并调用onCreate方法,Instrumentation再通过反射机制创建目标Activity,并管理其生命周期(回调Activity.onCreate()等方法)

ActivityThread核心代码如下

public static void main(String[] args) {
...
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
//在attach方法中会完成Application对象的初始化,然后调用Application的onCreate()方法
thread.attach(false);

if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
...
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
ActivityThread 有个内部Hander H ;

ApplicationThread 是ActivityThread 内部类

private class ApplicationThread extends IApplicationThread.Stub {

通过H与ActivityThread通信

通过binder与AMS通信

 

}

posted on 2021-06-08 09:30  framework开发  阅读(376)  评论(0编辑  收藏  举报