ActivityManagerService源码解析——开篇(持续更新)

581 阅读2分钟

Android的知识体系搭建

AMS系列

AMS之AMS的启动流程

AMS之进程的启动流程

一 概述

ActivityManagerService 是 Android 系统中的最重要的服务之一,甚至对于应用开发者来说没有之一

前面我们介绍了 Android 系统中的四大组件 ActivityServiceBroadcastContentProvider。在这个过程中,我们会经常看到 ActivityManager.getService 这样一行代码,又或者是一个叫做 mService 的成员对象,这个对象就是 ActivityManagerService(后续简称 AMS)。AMS 这个服务有多重要?它可以说是我们日常接触的,最重要的系统服务,甚至没有之一。

而 AMS 的解析,相比之前的内容,难度会更上一个台阶。当然,因为我个人的能力有限,也只能尽力讲清楚 AMS 的工作原理,如果其中有不正确的地方,欢迎大家评论指出。

AMS 是 Android 系统重的重要服务,它负责了大量的工作,包括且不限于:

  • 四大组件的启动
  • 应用程序和系统服务的生命周期管理
  • 任务栈的管理
  • 进程的管理
  • 内存的管理
  • 等等

并且相比其他系统服务,它显得更加的庞大和复杂。今天,我们就开始解析 AMS 这个系统服务。

二 AMS 的启动流程

AMS 这个服务,是通过 SystemServer 启动的,在 SystemServer 三批启动的进程中,它是最早的那一批。虽然只是一个服务的启动过程,但是在 AMS 这个服务中,还有着一些其他的子服务(通过 setSystemProcess)添加。

要了解 AMS 的工作机制,我们首先需要了解一下 AMS 的启动流程。 详细请查看AMS源码解析——AMS的启动流程

三 AMS 的进程启动流程

在之前分析四大组件的启动时,我们应该会经常看到这样一句代码 mService.startProcessXXX,这段代码其实就是调用 AMS 启动进程的函数。

在进程的启动的过程中,一般涉及到的进程会有四个。客户端 Client(一般是桌面的 Launch 进程),Zygote 孵化进程,AMS 进程,被启动的进程 App。

AMS 不是单独进程,它和其他很多服务共用一个 SystemServer 进程,它的底层名是 system_server,这个进程也是用于 binder 通信的中间进程,在 binder 通信中会详细介绍。

进程的启动流程详细查看AMS之进程的启动流程

三 AMS 进程管理之 LRU 算法

四 AMS 内存管理之 ADJ 算法

六 AMS 有关进程的思考和优化

未完待续