美文网首页Android开发Android技术知识Android知识
浅析ActivityManagerService(一)——开篇

浅析ActivityManagerService(一)——开篇

作者: NoOneDev | 来源:发表于2017-01-13 20:56 被阅读868次

    今天开始我么开始学习ActivityManagerService相关只是,其中包括ActivityManagerService的启动,应用程序创建,子Activity的创建过程。。。

    ActivityManagerService(AMS) 掌握了所有应用程序的创建、管理,所以他在framworks层有着举足轻重的作用。其实AMS的主要功能就是通过Binder进程间通信与Client进程的ActivityManager通信。在创建Activity之后将其交由ActivityManager来管理。


    ActivityManagerService.jpeg

    那么我们者神奇的ActivityManagerService是怎么创建的呢?Gityuan的一篇博客写得非常的好,很形象的给我讲述了AMS的创建过程。我就在这里照猫画虎稍微解释一下吧!
    相关类简述:

    • SystemServer.java

    本身由zygote进程运行,用来启动各种各样的系统服务(SystemService)

    • SystemService.java

    运行在系统进程中的service,每个SystemService都是有生命周期的,所有的生命周期函数都是运行在SystemServer的主线程当中。
    1.2.1 每个SystemService都有一个参数为Context的构造函数,用来初始化SystemService;
    1.2.2 调用onstart()使得SystemService处于运行状态,在这种状态下,该SystemService可以通过publishBinderService(String, IBinder) 方法来向外提供服务(binder interface),
    1.2.3 在启动阶段onBootPhase(int)会被不停的调用直到运行到PHASE_BOOT_COMPLETED阶段(启动阶段的最后阶段),在启动的每一阶段都可以完成一些特殊的任务。

    • SystemServiceManager.java

    负责管理SystemService的创建、启动以及其他生命周期函数

    在SystemServer中获取AMS对象,并调用SystemServiceManager对象的方法startService()启动服务。但是获取AMS对象其实是在AMS的内部类Lifecycle的getService方法。

    mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService();
    

    那么后去这个对象,它都走了哪些初始化工作呢?Gityuan的博客上也有讲到,其实就是创建了三个线程:

    • ActivityManager
      管理Activity
    • android.ui
      初始化程序页面
    • CpuTracker

    AMS的内部实现

    AMS内部实现.png

    然后我们会发现这个和前面讲到的Binder内部实现是不是很是相似,其实本来就是相同的原理。
    在AMS中,每一个应用程序进程都使用一个ProcessRecord对象来描述,而每一个启动的Activity组件都用一个ActivityRecord对象来描述。

    相关文章

      网友评论

        本文标题:浅析ActivityManagerService(一)——开篇

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