整个startActivity经历了两次AIDL跨进程操作,这两次AIDL跨进程操作也是面试点,一定要记牢。
-
第一次AIDL:Laucher进程到system_server进程(AMS所在的进程)
int result = ActivityManagerNative.getDefault() .startActivity();
-
第二次AIDL:system_server进程(AMS所在的进程)到App进程
app.thread.scheduleLaunchActivity()
-
两次跨进程图示
还有一个面试点就是在第二次跨进程结束后,在App进程里面的一次运用Handler消息机制在线程间发送消息的操作。
- 线程间通讯
也就是ApplicationThread线程到主线程发送H.LAUNCH_ACTIVITY消息,最终通过反射创建目标Activity,然后进入onCreate()生命周期。
这样你又可以和面试官展开讨论Handler消息机制的源码了。
1、对于handle消息机制不了解的可以看我之前的文章:源码分析Handler机制中的内存共享和巧妙的设计模式
2、想了解这两次AIDL的具体操作流程可以参考这篇文章:startActivity启动源码分析