点击领取优惠~
239 字
1 分钟
主线程创建时机
主线程创建时机
ZygoteInit#zygoteInit中完成进程的初始化动作
public static Runnable zygoteInit(int targetSdkVersion, long[] disabledCompatChanges, String[] argv, ClassLoader classLoader) { ... // 原生添加名为“ZygoteInit ”的systrace tag以标识进程初始化流程 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ZygoteInit"); RuntimeInit.redirectLogStreams(); // 1.RuntimeInit#commonInit中设置应用进程默认的java异常处理机制 RuntimeInit.commonInit(); // 2.ZygoteInit#nativeZygoteInit函数中JNI调用启动进程的binder线程池 ZygoteInit.nativeZygoteInit(); // 3.RuntimeInit#applicationInit中反射创建ActivityThread对象并调用其“main”入口方法 return RuntimeInit.applicationInit(targetSdkVersion, disabledCompatChanges, argv, classLoader); }应用进程启动后,初始化过程中主要依次完成以下几件事情:
- 应用进程默认的java异常处理机制(可以实现监听、拦截应用进程所有的Java crash的逻辑);
- JNI调用启动进程的binder线程池(注意应用进程的binder线程池资源是自己创建的并非从zygote父进程继承的);
- 通过反射创建ActivityThread对象并调用其“main”入口方法。
主线程创建时机