AMS的启动
AMS指的是ActivityManagerService服务,这个是android提供的系统管理服务,所有的进程、组件相关的管理都在这个服务中实现,先来看一下它是怎么启动的:
- 1.调用构造方法,初始化AMS
- 2.调用setSystemServiceManager()和setInstaller()配置系统服务管理器和包安装器
- 3.调用initPowerManagement()初始化power相关
- 4.调用setSystemProcess()方法,配置自己成为apk进程,从此可以运行apk
- 5.调用installSystemProviders()方法安装系统的ContentProvider
- 6.调用setWindowManager()方法配置WMS
- 7.调用systemReady()处理系统启动完毕消息
其中的1、4、5、7是重点讲解的过程,其他的过程只是简单的设置,大家有时间可以看一下即可
AMS的构造
- 1.创建main handler 线程
- 2.创建两个广播队列BroadcastQueue,一个前台广播用,前台广播超时时间为10s,一个后台广播用,后台广播超时时间为60s
- 3.创建ActiveServices,管理ServiceRecord的生命周期
- 4.创建AppErrors,处理app crash等问题
- 5.创建ActivityStackSupervisor,管理ActivityStack TaskRecord ActivityRecord
- 6.创建ActivityStarter,负责启动Activity的管理
- 7.创建RecentTasks,管理当前所有的Task
- 8.创建cpu tracker 线程,监测cpu使用信息
- 9.将自己添加到WatchDog系统,监测死锁问题
setSystemProcess()方法
- 1.添加binder服务:meminfo gfxinfo dbinfo cpuinfo,这写服务可以用于调试,查看系统状态
- 2.查询ApplicationInfo并且加载运行
- 3.创建进程记录表,添加到mPidsSelfLocked容器,从这个时候开始加上启动AMS之前调用SystemServer::createSystemContext()创建的apk今晨骨架,system_server进程除了提供系统服务,本身也包含了apk进程的功能,可以运行apk
installSystemProviders()方法
- 1.查询出系统apk的所有的ContentProvider信息
- 2.调用ActivityThread::installSystemProviders()安装所有的ContentProvider
systemReady()方法
- 1.发送system ready消息给子系统
- 2.置mSystemReady标志为true
- 3.查询出不允许系统booting时启动的进程全部kill掉
- 4.如果是工厂模式,更改默认的top action
- 5.调用retrieveSettings()方法配置系统
- 6.调用startPersistentApps()启动persistent进程
- 7.调用startHomeActivityLocked()启动launcher
- 8.发送ACTION_USER_STARTED广播
WMS的启动
WMS是指WindowManagerService,负责视窗系统管理,所有的窗体的显示都是在这里控制,它的启动流程如下:
- 1.调用构造方法,初始化WMS
- 2.调用displayReady()方法初始化display
- 3.调用systemReady()方法处理系统启动完毕消息
- 4.调用computeNewConfiguration()方法计算一次,然后配置到上下文中