🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
startActivity 最终都会调用 startActivityForResult,通过ActivityManagerProxy 调用 system_sever 进程中 ActivityManagerService 的 startActivity 方法,如果需要启动的 Activity 所在进程未启动,则调用 Zygote 孵化应用进程,进程创建后会调用应用的 ActivityThread 的 main 方法,main 方法调用 attach 方法将应用绑定到 ActivityManagerService (保存应用的 ApplicationThread 的代理对象)并开启 loop 循环接收消息。ActivityManagerService 通过 ApplicationThread 的代理发送 Message 通知启动 Activity,ActivityThread 内部 Handler 处理 handleLaunchActivity,依次调用 performLaunchActivity,handleResumeActivity(即 Activity 的 onCreate,onStart,onResume) [深入了解 Activity 启动流程]([https://www.jianshu.com/p/13b07beacb1f](https://www.jianshu.com/p/13b07beacb1f)) ``` startActivity ->startActivityForResult ->通过ActivityManagerProxy 调用 system_server 进程中的 ActivityManagerServier#startActivity -> if (应用进程未启动) { ->调用Zygote 孵化应用进程 ->进程创建后调用 ActivityThread#main 方法 ->main方法 调用 attach 方法将应用进程绑定到ActivityManagerService 中(保存应用的 ApplicationThread 的代理对象) ->开启loop循环接收消息 } -> ActivityManagerService 通过 ApplicationThread 的代理发送 Message 通知启动 Activity ->Activity 内部 Handler 处理 handleLaunchActivity ->依次调用 performLaunchActivity,handleResumeActivity(onCreate, onStart, onResume) ```