说明:本文是基于Android6.0源码来分析的
- Instrumentation这个类,我的理解是:Instrumentation是一个用来监视Activity的监测类,Activity的生命周期的函数也是Instrumentation来调用的,那么他是再什么时候初始化的呢?
- 下面我们就来分析一下Instrumentation这个类的初始化时机和在什么时候会初始化
- 我们启动一个应用的时候系统就会给我们准备一个Instrumentation的实例;开启一个app进程,会掉用ActivityThread的mian方法
public static void main(String[] args) {
...
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
...
}
接着是ActivityThread#attach方法,由于我们传进来的是false,所以走if里面的逻辑。IActivityManager是一个AIDL的接口,这里涉及到进程间通信,就不详细讲解了,网上已经有大量的文章讲解IPC了。IActivityManager的实现类就是大名