App管理服务-ActivityManagerService
ActivityManagerService(俗称AMS)是一个非常重要的系统服务,它是在SystemServer中被启动的进程之一。作用及其广泛,主管的就是应用App的四大组件以及进程信息,可以说它管理着app世界的所有应用。zygote孵化所有java进程,system_server管理所有服务,AMS管理所有app进程。
源码基于Android 13
ActivityManagerService
AMS作为一个系统服务,也是在SystemServer中启动的,并且属于是bootstrap类型的服务,会被添加到WatchDog的监控中。通常情况下,这些服务都是由SystemServiceManager通过反射启动的,这里也不例外。这里我们可以看下其启动流程:
1 | |
这里可以看到在启动AMS前还先启动了ATMS,然后作为参数传递给AMS进行启动。这里ATMS也是一个服务,它是由AMS拆分出来的专门管理Activity的一个服务,后面我们再单独查看,这里看下AMS的启动并不是直接启动的,而是经由了其Lifecycle间接启动。
1 | |
AMS并不是直接被启动的,而是由其静态内部类Lifecycle创建并启动的。我们在前面知道,所有通过SystemServiceManager启动的服务都是会被添加到其内部的集合中的,因此这里添加到服务集合中的实际上是AMS.Lifecycle对象,只不过我们可以通过它间接获取到AMS而已。 接下来我们看其构造方法:
1 | |
构造方法中主要是初始化,这里获取了三个线程,分别是系统线程也就是SystemServer所在的线程,然后是前台线程,最后是UI线程。接下来就是它的一些管理器,管理各个功能,这里大体上看下构造方法,然后回到启动方法start中。
1 | |
其实就是注册各种服务,注意在AMS中的很多服务都是Binder服务,因此需要注册到ServiceManager或者作为本地服务注册到LocalServices中。同样的,具体细节我们后面再看,到这里算是启动完成,然后我们再次回到SystemServer中,接下来是设置系统进程。
1 | |
可以看到,在这里SystemServer整个进程也是被当成了一个应用,其包名为android,然后交由AMS进行管理。继续往下看,就是发布系统的ContentProvider,这里就是从ProcessList中查询名为system的进程中的ContentProvider,然后进行注册。再次回到SystemServer中,在最后的其他进程也启动完毕后,会执行AMS的ready方法来表示其已完成启动。
到这里基本上AMS启动已经完成了,实际上来看AMS就是一个大管家类型的服务,虽然它管理很多的功能,但实际上这些功能都被拆分出一个一个的服务,由这些服务单独管理,然后AMS统筹处理。
