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

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

image.png

startCoreServices:启动核心服务:


image.png

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,927评论 25赞 708
  • 1:InputChannel提供函数创建底层的Pipe对象 2: 1)客户端需要新建窗口 2)new ViewRo...
    自由人是工程师阅读 5,888评论 0赞 18
  • 别爱得那么轻易 又恨得那么盲目 没什么非你不可 也没什么不可失去 世界上最永恒的幸福就是平凡。人生中最长久的拥有就...
    芥末不会不辣阅读 246评论 0赞 0
  • 更多文字,请关注清水话唠 重回人间还是重返人间,无论在过去现在未来,还是在现世来世三生三世,对目前的我而言绝壁是个...
    清水话唠阅读 843评论 0赞 49
  • “嘭!”惜伟不知道自己的头是第几次碰上小茶桌了,看到手里的花束没事,他才释然。 已经是周六凌晨一点,惜伟想一想再过...
    阿建w阅读 489评论 6赞 4

友情链接更多精彩内容