第10章 Activity Manager的机制与实现

Activity Manager是Android框架层提供的核心模块之一。如果仅从命名上理解,很容易将其视为Activity管理器,实际上,Activity管理器只是Activity Manager提供的众多功能之一。

10.1 Activity Manager概述

Activity Manager提供的功能主要有以下几种:

启动或杀死应用程序进程。

启动并调度Activity生命周期。

启动并调度应用程序Service生命周期。

注册Broadcast Receiver,并接收和分发Broadcast。

启动并发布Content Provider。

调度task。

检查、授予、收回访问URI的权限。

处理应用程序crash。

调整进程调度优先级及策略(调整OOM adj)。

查询当前系统运行状态(包含Memory、Graphics、CPU、Database等)。

Activity Manager的组成主要分为以下六部分:

1)Binder接口:由IBinder和Binder提供进程间通信的接口。

2)服务接口:由IInterface和IActivityManager提供系统服务的接口,此处IActivityManager不是通过IActivityManager.aidl转换而来的。

3)服务中枢:ActivityManagerNative继承自Binder并实现了IActivityManager,它提供了服务接口和Binder接口的相互转化功能,并在内部存储服务代理对象并提供了getDefault方法返回服务代理。

4)服务代理:由ActivityManagerProxy实现,用于与Server端提供的系统服务进行进程间通信。

5)Client:由ActivityManager封装一部分服务接口供Client调用。ActivityManager内部通过调用ActivityManagerNative的getDefault方法,可以得到一个ActivityManagerProxy对象的引用,进而通过该代理对象调用远程服务的方法。

6)Server:由ActivityManagerService实现,提供Server端的系统服务。

Activity Manager涉及的主要类如图10-1所示。

第10章 Activity Manager的机制与实现 - 图1

图 10-1 Activity Manager类图

注意 由于Android中未提供IActivityManager.aidl文件用于转化IActivityManager.java,因此,在IActivityManager.java内部并没有Stub和Proxy对象,这是与IPowerManager.java的不同之处。

由以上分析可知,Activity Manager仍然是基于Binder通信的C/S体系结构。在该体系结构中,Server端的ActivityManagerService提供核心功能,这里便从ActivityManagerService入手分析Activity Manager。