Zygote进程解析

简介

Zygote:受精卵
名字很形象,由他可以孵化出别的进程。
那么这个受精卵包括了什么呢?或者说有哪些基因,别的进程可以继承?

在Android系统中,JavaVM、应用程序进程以及运行系统的关键服务的SystemServer进程
都是由Zygote进程来创建的。
它通过fork(复制进程)的形式来创建应用程序进程SystemServer进程
由于Zygote进程在启动时会创建JavaVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个JavaVM的实例拷贝。

启动流程

zygote启动流程
  1. 创建AppRuntime并调用其start方法,启动Zygote进程。
  2. 创建DVM并为DVM注册JNI.
  3. 通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。

ZygoteInit:main入口

public static void main(String argv[]) {
       try {
            // 注册Socket,作为服务端,接受ActivityManagerService的请求来创建app的进程
            zygoteServer.registerServerSocket(socketName);
            // preLoad
            preLoad();
            // 启动SystemServer进程
            if (startSystemServer) {
                startSystemServer(abiList, socketName, zygoteServer);
            }
            // loop
            zygoteServer.runSelectLoop(abiList);
            zygoteServer.closeServerSocket();
        } catch (Zygote.MethodAndArgsCaller caller) {
            caller.run();
        } catch (Throwable ex) {
            Log.e(TAG, "System zygote died with exception", ex);
            zygoteServer.closeServerSocket();
            throw ex;
        }
    }

大致如下:


init
  1. registerZygoteSocket
    创建LocalServerSocket,也就是服务端的Socket。
    当Zygote进程将SystemServer进程启动后,就会在这个服务端的Socket上来等待ActivityManagerService请求Zygote进程来创建新的应用程序进程。
  2. 启动SystemServer进程
  3. runSelectLoop
    监听新的socket链接

创建SystemServer

创建App

参考

《深入理解Android内核设计思想》
《Android系统源代码情景分析》
https://blog.csdn.net/itachi85/article/details/55047104

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • hello,亲,你好,我叫王菜鸟,菜鸟前段时间迷茫了,因为现在是在做app相关,而且陷入了公司的业务逻辑,所以和系...
    我叫王菜鸟阅读 4,712评论 0 2
  • 1 XML解析No29 【 XML:可拓展标记语言,语言和HTML类似,也是一种标记语言。 特点:标记是自定义...
    征程_Journey阅读 5,632评论 0 9
  • 第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第...
    接灰的电子产品阅读 14,642评论 64 25
  • 一 、todolist编辑修改 双击todolist弹出Input框,供编辑修改。 1、todolist双击设置动...
    麦口胡阅读 5,229评论 0 0
  • 希望有一天,你的轻声细语不再是别人眼里有气无力太过柔软的表现,而是生在骨子里的一种安静。不必再为了讨好别人,迎合环...
    唐喜儿阅读 884评论 0 1