美文网首页
Activity启动流程

Activity启动流程

作者: 锋Plus | 来源:发表于2017-12-10 17:24 被阅读4次

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

总体工作流程

Activity启动的工作流程,其实依靠Binder实现的。

AMS和应用的跨进程交互
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这个方法主要完成如下几件事

  1. 从ActivityClientRecord中获取待启动的Activity的组件信息
  2. 通过Instrumention的newActivity方法使用类加载器创建Activity对象
  3. 通过LoadedApk的makeApplication方法来尝试创建Application对象
  4. 创建ContextImpl对象并通过Activity发attach方法来完成一些重要数据的初始化
  5. 调用Activity的onCreate方法

图解整体流程

这里以全新启动为例进行分析。

进程层次启动流程

进程层次启动流程

进程层次详细启动流程

进程层次详细启动流程

应用层次详细启动流程

应用层次详细启动流程

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

相关文章

网友评论

      本文标题:Activity启动流程

      本文链接:https://www.haomeiwen.com/subject/nosvixtx.html