第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-1 Activity Manager类图
注意 由于Android中未提供IActivityManager.aidl文件用于转化IActivityManager.java,因此,在IActivityManager.java内部并没有Stub和Proxy对象,这是与IPowerManager.java的不同之处。
由以上分析可知,Activity Manager仍然是基于Binder通信的C/S体系结构。在该体系结构中,Server端的ActivityManagerService提供核心功能,这里便从ActivityManagerService入手分析Activity Manager。