对ActivityManagerService的一些理解

储阳曦
2023-12-01

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是运行在单独进程的,所以一定是跨进程的

 类似资料: