美文网首页
理解ActivityManagerService

理解ActivityManagerService

作者: RmondJone | 来源:发表于2022-06-30 08:58 被阅读0次

    一、AMS在Android7.0和Android8.0之后的差异

    Android7.0之前的AMS家族

    在Android7.0之前客户端进程想和AMS进行通信都是通过ActivityManagerNative(以下简称AMN)getDefault()获取的ActivityManagerProxy(以下简称AMP)来进行通讯的。

    Android7.0 ActivityManagerService是AMN的一个子类,AMP是AMN的代理类,从而间接的实现通过AMP跨进程和AMS直接通讯。



    Android8.0之后的AMS家族

    在Android8.0之后,AMS家族中不再有AMP和AMN,取而代之的是IActivityManager。使用了AIDL进程间通信技术,服务端AMS继承IActivityManager.Stub。

    二、AMS的的启动过程

    通过之前的文章Android系统启动过程,我们可以知道AMS的启动在SystemServer进程初始化的时候启动的。这里就从SystemServer的main函数开始逐步解析。



    AMS属于系统引导服务,所以会在上述startBoostrapServices()里进行初始化,我们继续来看startBoostrapServices函数。



    到这里我们可以清楚的看到,AMS会通过SystemServiceManager的实例调用startService方法初始化并启动

    三、AMS与应用程序进程

    在之前的文章Android四大组件的工作过程,我们可以知道AMS在App启动的过程中扮演了重要的角色,这里就不在过多的赘述。可以参考之前的文章,AMS与应用程序的关联主要有下面2点:

    • 启动应用程序时AMS会检查这个应用程序有没有启动,进程是否存在
    • 如果将要启动的应用程序进程不存在,则请求Zygote进程去fork出一个应用进程出来

    相关文章

      网友评论

          本文标题:理解ActivityManagerService

          本文链接:https://www.haomeiwen.com/subject/jbcfbrtx.html