面试题:说说startActivity启动的流程吧

整个startActivity经历了两次AIDL跨进程操作,这两次AIDL跨进程操作也是面试点,一定要记牢。

  • 第一次AIDL:Laucher进程到system_server进程(AMS所在的进程)


    image.png
int result = ActivityManagerNative.getDefault() .startActivity();
  • 第二次AIDL:system_server进程(AMS所在的进程)到App进程


    image.png
app.thread.scheduleLaunchActivity()
  • 两次跨进程图示


    两次跨进程图示

还有一个面试点就是在第二次跨进程结束后,在App进程里面的一次运用Handler消息机制在线程间发送消息的操作。

  • 线程间通讯
    也就是ApplicationThread线程到主线程发送H.LAUNCH_ACTIVITY消息,最终通过反射创建目标Activity,然后进入onCreate()生命周期。

这样你又可以和面试官展开讨论Handler消息机制的源码了。

1、对于handle消息机制不了解的可以看我之前的文章:源码分析Handler机制中的内存共享和巧妙的设计模式
2、想了解这两次AIDL的具体操作流程可以参考这篇文章:startActivity启动源码分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。