总结:
Activity的启动过程,我们可以从Context的startActivity说起,其实现是ContextImpl的startActivity(内部调用startActivityForResult),然后内部会通过Instrumentation来尝试启动Activity,这是一个跨进程过程,它会调用ams的startActivity方法,当ams校验完activity的合法性后,会通过ApplicationThread回调到我们的进程,这也是一次跨进程过程,而applicationThread就是一个binder,回调逻辑是在binder线程池中完成的,所以需要通过Handler H将其切换到ui线程,第一个消息是LAUNCH_ACTIVITY,它对应handleLaunchActivity,在这个方法里完成了Activity的创建和启动,接着,在activity的onResume中,activity的内容将开始渲染到window上,然后开始绘制直到我们看见。
流程
Launcher进程请求AMS- AMS发送创建应用进程请求
Zygote进程接受请求并孵化应用进程- 应用进程

这篇博客详细介绍了Android中Activity的启动流程,从Launcher启动和内部启动两个角度进行分析。涉及AMS(Activity Manager Service)的角色,Binder通信,Instrumentation的管理功能,以及ActivityThread、ApplicationThread和Handler在启动过程中的作用。在启动过程中,涉及到进程孵化、生命周期管理以及UI线程的切换等关键步骤。
最低0.47元/天 解锁文章
2128

被折叠的 条评论
为什么被折叠?



