Activ ity Manager框架解析Activ ity Manager在 操 作 系 统 中 有 重 要 的 作 用 , 本 文 利 用 操 作 系 统 源 码 , 逐 步 理 清Activ ity Manager的框架,并从静态类结构图和动态序列图两个角度分别进行剖析,从而帮助开发人员加强对系统框架及进程通信机制的理解。Activ ity Manager的源码结构图:Activ ity Manager 的作用ActivityManager 的功能是与系统中所有运行着的 Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等。比如函数 getRunningServices() 的源码是: public List getRunningServices(int maxNum) throws SecurityException { tr y { r e tur n (List)ActivityManagerNative.getDefault() .getServices(maxNum, 0); } c a tc h (RemoteException e) { // System dead, we will be dead too soon! r e tur n n ul l ; } }从源码中可以看到ActivityManager的大多数功能都是调用了ActivityManagerNative类接口来完成的,因此,我们寻迹来看ActivityManagerNative的代码,并以此揭示ActivityManager的整体框架。ActivityManager的静态类图通过源码,可以发现 ActivityManagerNative 类的继承关系如下:public abstract class ActivityManagerNative extends Binder implements IactivityManager继承自 Binder 类,同时实现了 IActivityManager 接口。同样的,我们继续沿 Binder 和 IActivityManager 上溯,整理出如下图所示的类结构图。在这张图中,绿色的部分是在 SDK 中开放给应用程序开发人员的接口,蓝色的部分是一个典型的Proxy模式,红色的部分是底层的服务实现,是真正的动作执行者。这里的一个核心思想是 Proxy模式,我们接下来对此模式加以介绍。Proxy 模式:Proxy 模式,也称代理模式,是经典设计模式中的一种结构型模式,其定义是为其他对象提供一种代理以控制对这个对象的访问,简单的说就是在访问和被访问对象中间加上的一个间接层,以隔离访问者和被访问者的实现细节。结 合 上 面 的 类 结 构 图 , 其 中 ActivityManager 是 一 个 客 户 端 , 为 了 隔 离 它 与ActivityManagerService , 有 效 降 低 甚 至 消 除 二 者 的 耦 合 度 , 在 这 中 间 使 用 了Activ...