SystemServer的启动 SystemServer SystemServiceManager SystemService ServiceManager的介绍

关于framework中的某些源码的分析,只记录下结论,以及主要的一些地方,具体的代码逻辑就不一一分析了,平时也不一定能用得上,需要用到的时候在根据记录的一些标记去寻找。这样方便记录与查看,没那么费脑。

  • SystemServer

SystemServer是一个由zygote孵化出来的进程,在ZygoteInit的startSystemServer方法中被启动并初始化,进程id和组id均为1000,名字为system_server,pid为0。

SystemServer叫做系统服务进程,大部分Android提供的一些系统服务都运行在该进程中,包括AMS,WMS,PMS,这些系统的服务都是以一个线程的方式存在在SysyemServer进程中。

AMS:ActivityManagerService--》ActivityManager,管理整个框架的任务,进程管理,Intent解析等的核心实现,管理四大组件和他们守在的进程。

PMS:PackageManagerService---》PackageManager,管理软件包的解包,验证,安装,升级等等。

WMS:WindowManagerService---》WindowManager---PhoneWindowManager,和AMS高度粘合,负责窗口管理,输入事件的分发和管理。

SystemServer的启动是从main方法开始的,mai方法直接执行run方法,在run方法中,会检验系统的时间,启动系统的一些服务,创建并运行其它的服务。对于run方法中一些服务的启动,通过SysytemServiceManager启动一些继承自SystemService的服务,并将这些服务的Binder注册到ServiceManager中,对于其他的一些继承于IBinder的服务,通过ServiceMaanager的addService方法启动。

  • SystemServiceManager

管理一些系统的服务,在SystemServer中初始化。

  • SystemService

系统服务的基类,里面提供了一些回调方法。

  • ServiceManager

​​​​​​​1)作为进程间通信binder机制中的重要角色,运行在native层。

2)维护一个死循环,不断的查看是否有service的操作请求,如果有就读取相应的内核binder driver。

3)负责提供注册服务。

4)负责提供service代理。

5)维护一个缓存的Map。

6)context.getSystemService方法获取的manager都是通过ServiceManager来获取bindr对象。

  • context.getSystemService

​​​​​​​这是在开发过程中经常用来获取某些manager的一句代码,它的实现是在ContextImpl中,在SDK24:会存在一个class叫做SystemServiceRegistory,该class的静态代码块中会通过ServiceManager加载好各种系统Manager,并缓存在该class中,ContextImpl.getSystemService方法会从其中拿去Manager并返回;在SDK22中,会直接在ContextImpl的静态代码块中加载好各种Manager,并缓存,在后续的ContextImpl.getSystemService方法中直接返回。

 

你可能感兴趣的:(framework)