启动Activity这一工作不管是相同应用的2个不同Activity的启动(例如从app主页点击进入某详情页),或者是不同进程不同应用的Activity启动(例如点击桌面图标启动应用的入口Activity),都是由Activity大管家ActivityManagerService(简称AMS)全权管理,而他们之间的通讯就要用到Binder,通过Binder与AMS多次通讯,才能启动activity。
总体工作流程
Activity启动的工作流程,其实依靠Binder实现的。

ActivityManagerProxy
——AMS的代理,供应用进程调用。此时App进程为Client端,AMS为Server端。
ApplicationThreadProxy
——应用进程的代理,供AMS进程调用。
此时AMS为Client端,App进程为Server端。
具体工作流程
Android在线查看源码:http://androidxref.com/5.0.0_r2/xref/frameworks/base/core/java/android/app/ActivityThread.java
具体源码可以去网上自己找来看,这里就不贴了,可以结合下面的流程图一步步地看。

最终在performLaunchActivity
这个方法主要完成如下几件事
- 从ActivityClientRecord中获取待启动的Activity的组件信息
- 通过Instrumention的newActivity方法使用类加载器创建Activity对象
- 通过LoadedApk的makeApplication方法来尝试创建Application对象
- 创建ContextImpl对象并通过Activity发attach方法来完成一些重要数据的初始化
- 调用Activity的onCreate方法
图解整体流程
这里以全新启动为例进行分析。
进程层次启动流程

进程层次详细启动流程

应用层次详细启动流程

参考文章及图片来源:http://www.jianshu.com/p/72059201b10a
网友评论