android java进程管理(五)之system_server的启动
来源:互联网 发布:html博客源码 编辑:程序博客网 时间:2024/05/18 00:12
System_Server进程的启动
如前面讲解zygote小节中,system_server进程的java入口是SystemServer::main(),这个主方法直接调用了SystemServer::run()方法,然后在这个方法中启动所有的java binder服务,逻辑很简单,就是按部就班的处理,下面我们分析最重要的两个binder服务的启动流程。
在AMS启动之前,系统先调用SystemServer::createSystemContext(),这个方法主要创建ActivityThread,并且执行attach()操作,使system_server进程基本包含了apk进程的骨架。
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()方法计算一次,然后配置到上下文中
1 0
- android java进程管理(五)之system_server的启动
- Android system_server进程启动
- android java进程管理(三)之apk进程的启动
- android System_Server进程
- zygote system_server的启动
- android activity管理(五)之ActivityRecord的启动
- android java进程管理(六)之apk进程的回收
- System_Server进程
- System_Server进程
- Android源码分析--system_server进程分析
- system_server native库的启动过程
- Android之system_server与zygote之作用
- Android之system_server与zygote之作用
- Android之system_server与zygote之作用
- Android之system_server与zygote之作用
- Android之system_server与zygote之作用
- Android之system_server与zygote之作用
- Android Framework学习(五)之应用进程启动流程
- 3516A-sample的使用2--PQ_TOOL获取视频
- requestWindowFeature使用详解
- Elasticsearch索引mapping的写入、查看与修改
- ABAP实现农历转成公历
- iOS之http请求的问题解决
- android java进程管理(五)之system_server的启动
- 类反射机制分析
- BigDecimal加减乘除运算
- C++ STL基本容器的使用
- Fiddler教程
- 【源码解析】JDK源码之LinkedList
- 高性能Mysql主从架构的复制原理及配置详解
- Android知识框架
- 名企笔试:蘑菇街2017校园(特殊交换)2017-03-18 算法爱好者