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) 编辑 收藏 举报