1.引言
看了一段时间关于SystemServer进程的博客,有点小理解,写一篇关于SystemServer的小笔记,然后走一遍过程。
2.正题
ZygoteInit通过startSystemServer方法fork了一个SS进程。这个进程有啥作用呢。
image.png
handlerSystemServerProcess()方法只要是以下三个方法:
image.png
其中applicationInit()很有意思很重要。该方法中有一个,invokeStaticMain方法通过反射调用main方法:
image.png返回一个异常,这个异常被ZygoteInit的 捕捉到了,进而执行run方法 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服务
image.png
另外也可以看到为什么说handler默认是主线程,以及android 应用本身就是基于handler/Looper/Message的
startBootstrapServices():启动java层的各种服务。framwork层的服务。例如AMS
startCoreServices:启动核心服务:
image.png
startOtherServices也与上面一样启动各种服务。
总结下:SystemServer进程最终会执行到SystemServer类中的main方法中,初始化各种服务器,其中第一个初始化的就是ActivityManagerService。当我们点击启动app的时候。Zygote会对这个消息进行处理,最终执行到applicationInit。那么是在哪里调用方法启动应用的呢?
网友评论