浅析ActivityManagerService(一)——开篇

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

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

《浅析ActivityManagerService(一)——开篇》 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的内部实现

《浅析ActivityManagerService(一)——开篇》 AMS内部实现.png

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

    原文作者:NoOneDev
    原文地址: https://www.jianshu.com/p/3db3930b5a57
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞