Android系统进程之Activity管理——ActivityManagerService(AMS)

一. 为什么会有AMS

对于Android app开发人员来说,Activity是其打交道最多的组件了:App的每一个界面都对应于一个Activity。每个Activity都有他的生命周期(那几个生命周期应该已经烂熟于心了吧),所以我们应该有一种机制来记录并管理这些Activity的状态信息,从而根据这些信息,来对App的内存进行分配回收等管理操作。综上,掌握好AMS的工作原理,可以较好地理解Activity组件的状态信息,从而了解到app所处的状态:这对于App开发人员,当然也包括Android系统开发人员是十分必要的。

AMS主要职责:记录并管理Activity(以及其他组件)的状态(不包括内容显示等),同时可以提供查询功能。

二. Activity Stack

前面说到了AMS主要负责记录并管理Activity(或其他组件)的状态,具体的实现是在ActivityStack类中。首先该类通过枚举类型定义了Activity所有可能经历的状态,如下:

enum ActivityState{
    INITIALIZING,
    RESUMED,
    PAUSING,
    PAUSED,
    STOPPING,
    STOPPED,
    FINISHING,
    DESTROYING,
    DESTROYED
}
有了这些状态后,AMS又是如何记录Activity等的状态的呢?ActivityStack类利用了Java中封装比较好的集合工具:这里是利用了多个ArrayList,其中的元素都是ActivityRecord类型。ActivityRecord类负责记录每个Activity的运行时信息。

ActivityState,ArrayList<ActivityRecord>,ActivityRecord构成了ActivityStack的主要框架。他主要通过这三种变量来记录并管理Activity等组件的状态信息。

另外,需要注意的是,ActivityManagerService其实只是一个线程,他寄生于SystemServer进程。(我在其他地方已经说过了,这里小小地回顾下)Android系统在启动时,有三类最重要的系统进程要启动:ServiceManager,Zygote(启动过程中会启动DVM虚拟机,并会启动SystemServer进程)和SystemServer(提供本地服务进程以及Java语言编写的众多系统服务)。其中,SystemServer启动后会同时启动一些重要的系统服务,如AMS,WMS等。在这个阶段,AMS就这样寄生于SystemServer启动了。同时,SystemServer会启动两类系统服务:本地服务,Java层服务。本地层服务包括:SurfaceFlinger,AudioFlinger等,Java层服务包括:AMS,WMS等。

三. Activity Task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值