编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 02.Android虚拟机知识
  • 03.App核心概念分析
  • 04.Android消息机制
  • 05.Android程序UI框架
  • 06.Android应用窗口
  • 07.WMS机制深入分析
  • 08.PMS机制深入分析
  • 09.AMS机制深入分析
  • 11.四大组件原理分析
  • 12.四大组件原理分析
  • 13.View绘制流程分析
  • 14.View渲染流程分析
  • 16.Android绘制原理
  • 17.Android事件传输
  • 18.Android事件拦截
  • 21.View自定义控件反思
  • 22.ViewGroup自定义控件
  • 25.IPC跨进程通信实践
  • 29.Binder机制的理解

09.AMS机制深入分析

目录介绍

  • 01.快速了解AMS机制
    • 1.1 AMS是什么
    • 1.2 应用于那些场景
    • 1.3 可以解决那些问题
  • 02.AMS总体介绍
    • 2.1 AMS创建流程
  • 03.AMS流程分析
    • 3.1 AMS启动流程
    • 3.2 AMS初始化流程

01.快速了解AMS机制

1.1 AMS是什么

  • AMS-ActivityManagerService是Android系统中极其重要的系统服务。
    • AMS贯穿了Android系统组件的核心服务,主要负责Android系统中四大组件的启动、切换、调度以及应用进程管理和调度工作。

1.2 应用于那些场景

  • 常见的场景
    • 统一调度所有应用程序的Activity的生命周期
    • 启动或杀死应用程序的进程
    • 启动并调度Service的生命周期
    • 注册BroadcastReceiver,并接收和分发Broadcast
    • 启动并发布ContentProvider
    • 调度task
    • 处理应用程序的Crash
    • 查询系统当前运行状态

1.3 可以解决那些问题

  • 深刻了解Android启动流程与AMS特性之后,项目开发中的很多问题都会迎刃而解,比如:
    • 热修复、组件化路由、插件化、leakCanary内存问题分析、Hilt注入、Glide原理、launchModel、权限验证、四大组件等相关逻辑和代码……深刻了解之后能帮助Android开发者更加灵活地进行项目开发。
  • 业务开发遇到的问题
    • 比如我们在开发中遇到的跳转问题、栈的管理问题、ANR问题等等都是与AMS对四大组件的管理息息相关,只有掌握了AMS,才能更加高效的开发出优质的app。

02.AMS总体介绍

2.1 AMS创建流程

  • AMS 即 ActivityManagerService
    • 负责 Activity、Service、Broadcast、ContentProvider 四大组件的生命周期管理。
    • image
      image
  • AMS 创建流程简述:
    • SystemServer:依次调用 main()、run()、startBootstrapServices(),再调用 Lifecycle 的 startService() 方法;
    • Lifecycle:startService() 方法中调用 SystemServiceManager 的 startService() 方法,并将 Lifecycle.class 传入;
    • SystemServiceManager:startService() 方法通过反射调用 Lifecycle 的构造方法,生成 Lifecycle 对象;
    • Lifecycle:构造方法中调用 AMS 的构造方法创建 AMS 对象,并通过 getService() 方法返回 AMS 对象。

03.AMS流程分析

3.1 AMS启动流程

  • AMS启动流程如下所示
    • SystemServer#main(),这个是AMS启动的入口。执行java代码中的main方法,创建了一个SystemServer对象并且执行run方法
    • SystemServer#run(),创建系统的 Context,创建 SystemServiceManager,启动引导服务,启动核心服务,启动其他服务。
    • SystemServer#startBootstrapServices(),启动 AMS,启动 PMS等核心逻辑
    • ActivityManagerService.Lifecycle#startService(),这个是开启AMS服务
    • SystemServiceManager#startService(),通过反射调用 serviceClass 的构造方法 创建 Lifecycle 对象
    • SystemServiceManager#startService()#service.onStart(),调用 Lifecycle 的 onStart 方法。
    • ActivityManagerService.Lifecycle#onStart(),进一步调用 AMS 的 start() 方法初始化。

3.2 AMS初始化流程

  • AMS初始化流程图如下
    • image
      image
  • AMS初始化流程步骤
    • ActivityManagerService#(),在构造函数中创建用于启动 Service 的 mServices 对象,创建用于存储 ContentProvider 的 mProviderMap等。
    • ActivityManagerService.Lifecycle#onStart(),进一步调用 AMS 的 start() 方法初始化。
    • SystemServer#startBootstrapServices(),调用了 AMS 的 initPowerManagement() 和 setSystemProcess() 方法。
    • SystemServer#startCoreServices(),调用了 AMS 的 setUsageStatsManager() 方法。
    • SystemServer#startOtherServices(),调用了 AMS 的 installSystemProviders()、setWindowManager() 和 systemReady() 方法。
贡献者: yangchong211
上一篇
08.PMS机制深入分析
下一篇
11.四大组件原理分析