专栏首页Android技术分享一张图弄清Activity的启动过程

一张图弄清Activity的启动过程

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【建议收藏系列】:我打赌你一定没搞明白的Activity启动模式!

    一个应用程序当中通常都会包含很多个Activity,每个Activity都是一个具有特定的功能,并且可以让用户进行操作的组件。另外,Activity之间可以相互...

    Android技术干货分享
  • 精选Android中高级高频面试题:四大组件及Fragment原理

    延伸:从整个生命周期来看,onCreate和onDestroy是配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用; 从Activity是否可...

    Android技术干货分享
  • Android知识笔记:Android 仿iOS 侧滑关闭Activity框架透底问题

    在项目中使用 SwipeBackLayout 或 SlidingMenu 侧滑关闭Activity框架时,由于windowIsTranslucent这个属性设置...

    Android技术干货分享
  • 逆向资源盲盒+注入空格分割

    链接:https://pan.baidu.com/s/1vRHuASGBDzwZvjaubafzlQ

    天钧
  • 如何开通微信公众号同步?(微信打开)

    1. .点击右上角按钮「. . .」,选择在浏览器中打开网页

    云加社区
  • WorkManager 在 Kotlin 中的实践

    WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。对于绝大部分后台执行任务来说,...

    Android 开发者
  • App启动流程三问

    App的启动流程和Activity的启动流程也是面试中常常被问到的知识点,但是往往会涉及到很多方面,让我们不知道从何做答,今天就一起来看看启动流程相关问题:

    码上积木
  • Android屏幕旋转之横屏竖屏切换的实现

    刚实现了App内手机横/竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。

    砸漏
  • winsock库

    加载Winsock库函数 : WSAStartup 1 int WSAStartup( 2 WORD wVersionReques...

    用户1154259
  • Caffe源码理解3:Layer基类与template method设计模式

    层的概念在深度神经网络中占据核心位置,给定输入,数据在层间运算流动,最终输出结果。层定义了对数据如何操作,根据操作的不同,可以对层进行划分(具体参见Caffe ...

    李拜六不开鑫

扫码关注云+社区

领取腾讯云代金券