每日一题:为什么要专门使用Zygote进程去孵化app进程,而不是让SystemServer去孵化

409 阅读3分钟

在android面试中,我们常会遇到Framework面试相关问题,而今天要分享的就是为什么要专门使用Zygote进程去孵化app进程,而不是让SystemServer去孵化

其主要考察的是程序员对zygote工作内容的理解,fork的理解,还有systemServer进程的工作内容。

问题正解:

通过上面的题目《Zygote进程的启动流程》&《SystemServer进程的启动流程的分析》的内容学习,大家不难发现zygote和SystemServer进程的工作重点。第一:zygote进程的运行主要做以下几件事:虚拟机初始化与启动,JNI函数的注册,加载公用的各种资源,创建socket服务器并在runSelectionLoop中死循环等待socket消息,fork 了systemServer进程等操作;第二:SystemServer进程作为Zygote进程的大儿子,主要工作主要是启动和管理了引导服务、核心服务、其他服务,等共90多种服务,这些服务是专门提供给app进程使用的。

那么一个app的运行需要什么:1)每个app必须有虚拟机;2)必须能够调用framework中的资源和函数,比如要使用ImageView,那么这个类谁来加载?Zygote帮忙加载了;3)需要AMS WMS等服务给app运行和管理提供支持。

那么,在App出生的时候,如何让它天生的具备虚拟机和 各种android的资源和函数的引用呢?那就是通过fork zygote得到。Zygote做的事情就是加载资源加载通用的库,创建虚拟机等操作,当从zygote fork产生进程后,这个进程就自然的具有了和zygote一模一样的所有的资源和代码了,那么这个时候就不需要app再去自己创建虚拟机自己加载各种资源了,因此app进程的fork是通过Zygote进程。

SystemServer所创建和启动的各种Service,会将这些服务的binder发送给ServiceManager进程进程统一的管理,我们app可以通过ServcieManager拿到这些服务的binder,然后通过binder来访问这些服务。

今日分享到此结束,下期更精彩~

关注公众号:Android老皮
解锁  《Android十大板块文档》 ,让学习更贴近未来实战。已形成PDF版

内容如下

1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构基础
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360°全方面性能调优
10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔