在Android系统中,ActivityManagerService即AMS是管理Android四大组件的核心,其重要性不言而喻。那么,从本篇文章就开始分析AMS的源码,理解其内部的逻辑。
ActivityManagerService对象的创建
Android系统启动SystemServer这里已经讲了,ActivityManagerService最初的创建位置在SystemServer的startBootstrapServices方法内。
1 | //frameworks/base/servces/java/com/android/server/SystemServer.java |
该方法表示通过SystemServiceManager的startService方法,启动Lifecycle后获取服务。然后为系统进程创建并启动Application实例。
Lifecycle是ActivityManagerService的内部静态类。
1 | public static final class Lifecycle extends SystemService { |
可以看出Lifecycle类的作用,就是在ActivityManagerSerivce与SystemService之间充当适配器的作用。
再回头看一下SystemServiceManager的startService方法做了什么。
1 | //frameworks/base/services/core/java/com/android/server/SystemServiceManager.java |
这里通过构造器创建一个SystemService的子类实例,这里即Lifecycle类的实例,再调用service.onStart()方法。
在Lifecycle的构造方法中,会根据传入的Context参数创建一个ActivityManagerService对象。那我们看一下ActivityManagerService的构造方法。
1 | //frameworks/base/servces/core/java/com/android/server/am/ActivityManagerService.java |
ActivityManagerService的构造方法创建了ActivityManagerService线程、UI线程和CpuTracker线程,同时创建了系统目录以及用于创建Activity的StackSupervisor和ActivityStarter。
到这里,ActivityManagerService对象就创建完毕。
ActivityManagerService对象创建后操作
下面我们再看一下startService(SystemService)方法。
1 | // \frameworks\base\services\core\java\com\android\server\SystemServiceManager.java |
这个方法主要做了两件事情,一个是注册服务,另一个就是启动服务。而Lifecycle的onStart方法中又会调用ActivityManagerService的start方法,下面跟踪一下该方法。
1 | private void start() { |
到这里,ActivityManagerService就已经创建起来了。
我们再回到SystemServer的startBootstrapServices方法中,在创建了ActivityManagerService后,又调用了其setSystemProcess方法。
1 | // 为系统进程创建并启动Application实例 |
1 | public void setSystemProcess() { |
该方法的主要作用是为系统进程创建并启动Application实例并启动,同时也注册一些服务。
现在我们再回头看一下SystemServer调用startBootstrapServices方法的地方。
1 | //frameworks/base/servces/java/com/android/server/SystemServer.java |
在执行了startBootstrapServices方法后,又接着调用了startCoreServices方法和startOtherServices方法。这两个方法用于启动一些在startBootstrapServices方法内没有启动的必要服务和其他各种服务。
1 | //frameworks/base/servces/java/com/android/server/SystemServer.java |
这里调用了ActivityManagerService的systemReady方法,其中的Lambda表达式应为Runnable类型。
1 | //frameworks/base/servces/core/java/com/android/server/am/ActivityManagerService.java |
该方法可以根据goingCallback.run()的执行时间,分为三个部分。
- 在goingCallback.run()执行之前的主要操作是通知systemReady和杀掉启动时不被允许的进程。
- goingCallback.run()方法主要用于启动各种系统服务进程
- 在goingCallback.run()执行之后的主要操作是启动持久化进程、启动桌面Activity、发布ACTION_USER_STARTED和ACTION_USER_STARTING广播。
总结
本篇文章主要分析ActivityManagerService的创建和启动逻辑。在后续文章中,会对ActivityManangerService的具体使用,对四大组件进行管理,以及内存管理等内容进行分析。