• Android Framework 框架层 | AMS 定义与知识点梳理


    AMS 定义

    ActivityManagerService(简称 AMS),是 Android核心服务;因此其创建过程伴随在开机过程中,其由 System_serverServerThread 线程创建,创建完后就进入 home activity 界面,也就是 AMS 启动的第一个 activity

    从系统运行的角度看: AMS 可以分为 Client 端和 Service 端

    • Client 端运行在各个 app 进程,app 进程实现了具体的 Activity,Service 等,告诉系统我要那些 Activity,Service 等,并且调用系统接口来完成显示
    • Service 端运行在 SystemServer 进程,是系统级别的 ActivityManagerService 的具体实现,其响应 Client 端的系统调用请求,并且管理 Client 端各个 app 进程的生命周期

    AMS 功能

    AMS 主要负责系统中四大组件的启动、切换、及进程管理调度等工作;根据其主要的职能,可以从以下几个方面AMS 进行学习:

    • AMS 的创建及初始化过程
    • AMS 对于 Activity 的管理
    • AMS 对于 Broadcast 的管理
    • AMS 对于 Service 的管理
    • AMS 对于 ContentProvider 的管理
    • AMS 对于 Process 的管理

    AMS 关键函数

    • AMS 的 main 函数: 创建 AMS 实例,其中最重要的工作是创建 Android 运行环境,得到一个 ActivityThread 和一个 Context对象

    • AMS 的 setSystemProcess 函数: 该函数注册 AMS 和 meminfo 等服务到 ServiceManager 中;另外,它为 SystemServer 创建了一个 ProcessRecord 对象;由于 AMS 是 Java 世界的进程管理及调度中心,要做到对 Java 进程一视同仁,尽管 SystemServer 贵为系统进程,此时也不得不将其并入 AMS 的管理范围内

    • AMS 的 installSystemProviders: 为 SystemServer 加载 SettingsProvider

    • AMS的systemReady: 做系统启动完毕前最后一些扫尾工作;该函数调用完毕后,HomeActivity 将呈现在用户面前

    对AMS 调用轨迹分析是我们破解AMS的第一条线,希望读者反复阅读,以真正理解其中涉及的知识点,尤其是和 Android 运行环境及 Context 相关的知识,接下来深入了解下 AMS 的主要作用和启动流程

    AMS 主要作用

    统一调度 Activity

    AMS 中的重要数据类:
    • ProcessReccord: 保存该进程中包含的APK信息、内存状态信息用于内存回收、组件列表
    • ActivityRecord: binder 类可用于IPC调用(此处为WMS中调用),保存所有Acitivity信息,包括基本属性信息(包名、进程名、文件路径、图标主题等)和运行状态信息(idle、stop、finishing等)
    • TaskRecord: 任务栈信息,管理Activity的启动和退出顺序

    除此之外,在 frameworks\base\services\core\java\com\android\server\am 路径中,还有 serviceRecord、ProviderRecord、BoardRecord、ProcessRecord、UidRecord 等近50个 AMS 相关的类

    重要变量

    如后台的 Activity 和近期任务的 Activity 最多20个,onpause 必须在0.5秒内执行完,Activity 必须在10秒内完成启动并回调给 AMS

    启动 Activity

    Acitivity 的启动最终都会调用 startActivity(),总体上就是 ActivityThread和 AMS 和 WMS 的交互过程 Application 加载后,先加载 provider,然后才加载 Activity

    AMS 启动流程

    • 系统启动后 Zygote 进程第一个 fork 出 SystemServer 进程
    • SystemServer->run()->createSystemContext(): 创建了系统的 ActivityThread 对象,运行环境 mSystemContext、systemUiContext
    • SystemServer->run()->startBootstrapServices()->ActivityManagerService.Lifecycle.startService(): AMS 在引导服务启动方法中,通过构造函数 new Activity ManagerService()进行了一些对象创建和初始化(除 activity 外3大组件的管理和调度对象创建
    • 内存、电池、权限、性能、cpu等的监控等相关对象创建),start()启动服务 (移除进程组、启动 cpu 线程、注册权限、电池等服务)
    • SystemServer->run()->startBootstrapServices()->setSystemServiceManager()、setInstaller()、initPowerManagement()、setSystemProcess():AMS 创建后进行了一系列相关的初始化和设置
    • setSystemProcess(): 将 framework-res.apk 的信息加入到 SystemServer 进程的 LoadedApk 中,并创建了 SystemServer 进程的 ProcessRecord,加入到 mPidsSelfLocked,由 AMS 统一管理
    • SystemServer->run()->startOtherServices() AMS 启动后的后续工作,主要调用 systemReady()和运行调用时传入的 goingCallback
    • systemReady()/goingCallback: 各种服务或进程等 AMS 启动完成后需进一步完成的工作及系统相关初始化
    • 桌面应用在 systemReady()方法中启动,systemui在goingCallback 中完成;当桌面应用启动完成后,发送开机广播 ACTION_BOOT_COMPLETED

    总结

    AMS (ActivityManagerService) Android 的核心服务之一,管理着四大组件;AMS 是 Binder 服务,但不是通过 AIDL 自动生成的;好了,今天有关于 AMS 的框架设计的阐述就到这里了;为了帮助大家了解更多 Android Framework 框架层 必备的技术知识,这里特别提供一份由腾讯大佬所整理的一张 Framework 思维导图及其配套的一份学习手册;有需要思维导图及学习笔记的朋友: 可以私信发送 “进阶” 即可 直达获取;希望大家看完之后能给大家一些帮助

    内容展示如下:

    Android Framework 思维导图

    应用程序与 AMS 的通讯实现

    • 从应用程序进程到管理者进程
    • 应用程序进程向管理者进程发送消息
    • 从管理者进程到应用程序进程
    • 管理者进程向应用程序进程发送消息
    • 用户进程接收消息

    完整版 Android Framework 思维导图及学习手册 获取方式: 私信发送 “进阶” 即可 直达获取

    应用进程与 WMS 的通讯实现

    • WindowManagerImpl & WindowManagerGlobal
    • ViewRootImpl
    • 从应用进程到管理者进程
    • 从管理者进程到应用进程

    应用进程之间的通讯实现

    • 服务端编写 AIDL 文件
    • 编写 Service
    • 声明 Service
    • 客户端编写 AIDL 文件
    • 绑定服务,并调用
    • IBinder实现原理

    完整版 Android Framework 思维导图及学习手册 获取方式: 私信发送 “进阶” 即可 直达获取

    既然选择了程序员这个行业,那么你一定要做好充足的准备;要想在人前显贵,背后所付出的辛劳和汗水就是必须的

    Android 架构师之路还能漫长,与君共勉

  • 相关阅读:
    macbook电脑删除app怎么才能彻底清理?
    leetcode-22. 括号生成
    MySQL 索引底层 B+Tree 原理解析
    用 Kafka + DolphinDB 实时计算 K 线
    java获取两个日期之间的所有日期
    关于程序员职业规划的思考
    m基于matlab的BTS天线设计,带GUI界面
    Kerberos认证
    项目部署教程
    京东云开发者| Redis数据结构(二)-List、Hash、Set及Sorted Set的结构实现
  • 原文地址:https://blog.csdn.net/m0_62167422/article/details/126937528