最近看了一些关于zygote的资料,原来是抱着想看懂源码的目的去学习,结果。。。源码对我来说还是有点吃力,但是一些关于zygote的概念还是可以懂了些,在此整理一下学习过的资料。
应用基础知识:https://developer.android.com/guide/components/fundamentals.html
zygote浅谈:http://www.th7.cn/Program/Android/201404/187670.shtml
Android系统启动过程:http://www.cnblogs.com/bastard/archive/2012/08/28/2660389.html
zygote进程为根进程,主要是用来fork(创建,linux下创建新进程的方法)其他进程。
zygote分为c/c++和java:
- c/c++:为应用和system server创建进程。
- java:为应用和进程调用c/c++ zygote接口执行fork,创建vm进程(每个进程都有自己的dalvik虚拟机,因此应用代码是在与其他应用隔离的环境中运行,资料https://developer.android.com/guide/components/fundamentals.html)。
android service分为两种:native service和system service(inputMethodService, ActivityManagerService)。
每个应用只能访问执行其工作所需的组件,而不能访问其他组件,但仍有与其他应用共享数据以及访问系统服务的方法:
- 两个应用共享同一linux用户id,可以相互访问文件。为了节省资源,相同用户id可以在同一进程中运行,共享同一个vm(用户必须使用相同证书签署),这种情况下,可以互相访问对方的私有目录比如data信息、组件信息、内存等。Android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。
- 应用可以请求访问设备数据:联系人数据,相册数据等。