Android AMS 浅析

AMS(ActivityManagerService)Android的核心服务之一,对于framework各个核心服务,如果不是专门去做framework开发,先了解其基本的流程机制,再慢慢深究,整个framework框架还是比较庞大的,由于之前跟踪修改phone启动时间的一些问题,现先记下之前翻看AMS的一些结构。

首先AMS的启动,在Zygote forkSystemServer后,SystemServer 的init1()阶段是在native中实现,在init2()阶段SystemServer.java创建各个Android所需的核心服务,AMS便是由SystemServer启动的。


AMS的主要功能:

各个应用程序的调度

android四大组件的的管理,包括各组件的启动及生命周期等等

内存管理


基本框架图:

《Android AMS 浅析》《Android AMS 浅析》

《Android AMS 浅析》

AMS初始化流程:

一、在setSystemProcess方法中,注册AMS以及其他相关service到ServiceManager中,创建ProcessRecord对象,保存该对象信息。

二、在installSystemProviders方法中,完成SettingsProvider的初始化操作

三、在SystemReady方法中
初始化DeviceIdleController.LocalService,doze模式相关
清理提前启动的非persistent进程
retrieveSettings();读取Settings相关信息
启动相关persistent应用和Home应用,通过
startPersistentApps,
startHomeActivityLocked


简单概述上面如startPersistentApps的app启动流程
在通过PMS得到persistent和directBootAware的相关应用列表后,AMS通过socket通信与zygote进行消息传递,fork出对应的app进程。
在zygote启动进程后,通过反射调用对应进程中ActivityThread的main函数。 

随后在ActivityThread通过上面的框架图中 ActivityManagerNative.getDefault获
得AMS代理,
与AMS进行binder通信,AMS完成对应处理后,通过binder通信将处理结果丢给ActivityThread处理。
最后在ActivityThread完成最后的准备工作,调用callApplicationOnCreate执行app的onCreate函数。

至此app启动完成。


上述是在跟踪Phone启动时,初步记录的AMS的启动过程,源码还是自己去跟踪比较清晰。



    原文作者:秋霜
    原文地址: https://blog.csdn.net/u010211486/article/details/76177255
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞