深入理解Android:SystemServer进程的作用

1.引言

看了一段时间关于SystemServer进程的博客,有点小理解,写一篇关于SystemServer的小笔记,然后走一遍过程。

2.正题

ZygoteInit通过startSystemServer方法fork了一个SS进程。这个进程有啥作用呢。


深入理解Android:SystemServer进程的作用_第1张图片
image.png

handlerSystemServerProcess()方法只要是以下三个方法:


深入理解Android:SystemServer进程的作用_第2张图片
image.png

其中applicationInit()很有意思很重要。该方法中有一个,invokeStaticMain方法通过反射调用main方法:

深入理解Android:SystemServer进程的作用_第3张图片
image.png

返回一个异常,这个异常被ZygoteInit的 捕捉到了,进而执行run方法

深入理解Android:SystemServer进程的作用_第4张图片
image.png

run方法最终通过反射调用SystemServer的main方法,作用是:
通过以上分析其实main方法的主要作用是:
1、调整系统时间
2、设置属性persist.sys.dalvik.vm.lib.2的值为当前虚拟机的运行库路径
3、装载libandroid_servers.so库,初始化native层service
4、初始化系统Context
5、创建SystemServiceManager对象
6、调用startBootstrapServices(),startCoreServices(),startOtherServices()启动所有的Java服务


深入理解Android:SystemServer进程的作用_第5张图片
image.png

另外也可以看到为什么说handler默认是主线程,以及android 应用本身就是基于handler/Looper/Message的
startBootstrapServices():启动java层的各种服务。framwork层的服务。例如AMS

深入理解Android:SystemServer进程的作用_第6张图片
image.png

startCoreServices:启动核心服务:


深入理解Android:SystemServer进程的作用_第7张图片
image.png

startOtherServices也与上面一样启动各种服务。

总结下:SystemServer进程最终会执行到SystemServer类中的main方法中,初始化各种服务器,其中第一个初始化的就是ActivityManagerService。当我们点击启动app的时候。Zygote会对这个消息进行处理,最终执行到applicationInit。那么是在哪里调用方法启动应用的呢?

你可能感兴趣的:(深入理解Android:SystemServer进程的作用)