Android System_server

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jwc2436/article/details/80231219

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()方法计算一次,然后配置到上下文中

猜你喜欢

转载自blog.csdn.net/jwc2436/article/details/80231219