今天开始我么开始学习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对象来描述。
网友评论