1、ActivityManagerService的作用是负责管理系统中所有的Activity,想要使用它的能力,必须要获得一个它的对象。
2、ActivityManagerService是在SystemServer进程中创建的,并且运行在SystemServer进程。创建完成之后,就把它注册到ServiceManager中。
3、想要获得ActivityManagerService的能力,需要跨进程通信
到这里,知道了ActivityManagerService必须具备两个能力,一个是管理Activity的能力,一个是通过跨进程通信把自己的能力提供出去的能力。
这两个能力ActivityManagerService都有吗?
答案是:ActivityManagerService只有管理Activity的能力,另一个把自己的能力提供出去的是它的父类ActivityManagerNative
4、ActivityManagerService继承自ActivityManagerNative这个类
5、ActivityManagerNative通过实现IActivityManager接口获得的管理Activity的伪能力,为什么是伪能力。因为没有具体实现IActivityManager的方法,
这些方法由ActivityManagerService实现。
6、ActivityManagerNative还继承了Binder,提供了跨进程通信的能力。
这里为什么不直接ActivityManagerNative提供Activity管理能力,而要派生ActivityManagerService这个类来提供呢?
可能是框架设计的原因?简洁明了?
7、ActivityManagerProxy,代理对象。Binder机制中的。
这里有个疑问,为什么要用代理模式?
8、获取ActivityManagerService能力的流程。
首先调用ActivityManagerNative.getDefault方法,这个方法首先通过ServiceManager的getService方法获取
注册在ServiceManager的ActivityManagerService对象。然后调用asInterface方法,这个方法有两个作用,
一个是屏蔽掉ActivityManagerService继承的Binder成分。第二个是查询是不是跨进程通信,如果不是,直接返回。
如果是跨进程,返回的是ActivityManagerProxy的对象,而ActivityManagerService对象保存在ActivityManagerProxy中,形成远程代理。
这里因为ActivityManagerService是运行在单独进程的,所以一定是跨进程的