一张图弄清Activity的启动过程
image.pngActivity启动相关源码比较复杂、涉及到的链路较多,我经常在理清楚一遍之后过一段时间再阅读就和第一次读一样,依旧要费一番功夫才能理清。为了加深对Activity启动过程的理解也方便以后回顾因此我把整个Activity的启动过程总结为一张图。此图基于9.0的Android源码(Activty相关代码虽然在不断重构但核心逻辑还是没变的)。
图中相关模块的作用
ActivityThread
可以把它理解为应用运行的主线类,它的主要功能有:
包含了应用的入口 : main()
这个函数主要做了下面工作:
- 利用
ApplicationThread
建立了应用与AMS
的链接。 - 构造了
Instrumentation
。 - 创建了应用的
Application
。 - 开启了主线程的消息处理模型。
管理应用四大组件的运行
ApplicationThread
它是应用程序在AMS
中的Binder
对象,AMS
利用它可以和ActivityThread
通信,四大组件相关回调都是通过它来告诉ActivityThread
的。
Instrumentation
这个类伴随着ActivityThread
一块诞生,主要用来帮助ActivityThread
来管理Activity
相关工作。它持有着AMS
在应用端的Binder
,ActivityThread
主要通过它来和AMS
通信。
ActivityManagerService
它是Android最核心的服务,主要管理着Android系统中四大组件的运行,
ActivityStackSupervisor
负责所有Activity栈的管理。内部管理了mHomeStack、mFocusedStack和mLastFocusedStack三个Activity栈。其中,mHomeStack管理的是Launcher相关的Activity栈;mFocusedStack管理的是当前显示在前台Activity的Activity栈;mLastFocusedStack管理的是上一次显示在前台Activity的Activity栈。
ClientLifecycleManager
帮助AMS
回调应用程序四大组件生命周期相关方法。
参考文章
The End
【附】相关架构及资料
资料领取
关注+点赞+加群:185873940 免费获取!
点击链接加入群聊【Android IOC架构设计】:https://jq.qq.com/?_wv=1027&k=5tIZkaU
领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术