Android开发经验谈程序员Android技术知识

一张图弄清Activity的启动过程

2019-03-07  本文已影响77人  06fd4cf1f427

Activity启动相关源码比较复杂、涉及到的链路较多,我经常在理清楚一遍之后过一段时间再阅读就和第一次读一样,依旧要费一番功夫才能理清。为了加深对Activity启动过程的理解也方便以后回顾因此我把整个Activity的启动过程总结为一张图。此图基于9.0的Android源码(Activty相关代码虽然在不断重构但核心逻辑还是没变的)。

image.png

图中相关模块的作用

ActivityThread

可以把它理解为应用运行的主线类,它的主要功能有:

包含了应用的入口 : main()

这个函数主要做了下面工作:

  1. 利用ApplicationThread建立了应用与AMS的链接。
  2. 构造了Instrumentation
  3. 创建了应用的Application
  4. 开启了主线程的消息处理模型。

管理应用四大组件的运行

ApplicationThread

它是应用程序在AMS中的Binder对象,AMS利用它可以和ActivityThread通信,四大组件相关回调都是通过它来告诉ActivityThread的。

Instrumentation

这个类伴随着ActivityThread一块诞生,主要用来帮助ActivityThread来管理Activity相关工作。它持有着AMS在应用端的BinderActivityThread主要通过它来和AMS通信。

ActivityManagerService

它是Android最核心的服务,主要管理着Android系统中四大组件的运行,

ActivityStackSupervisor

负责所有Activity栈的管理。内部管理了mHomeStack、mFocusedStack和mLastFocusedStack三个Activity栈。其中,mHomeStack管理的是Launcher相关的Activity栈;mFocusedStack管理的是当前显示在前台Activity的Activity栈;mLastFocusedStack管理的是上一次显示在前台Activity的Activity栈。

ClientLifecycleManager

帮助AMS回调应用程序四大组件生命周期相关方法。

参考文章

(Android 9.0)Activity启动流程源码分析

The End

【附】相关架构及资料

资料领取

关注+点赞+加群:185873940 免费获取!

点击链接加入群聊【Android IOC架构设计】:https://jq.qq.com/?_wv=1027&k=5tIZkaU

领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术

上一篇下一篇

猜你喜欢

热点阅读