《深入理解Android 卷I》读书笔记

来源:互联网 发布:电脑手绘软件 编辑:程序博客网 时间:2024/06/07 04:45

init

init是一个进程,是用户空间的第一个进程。
对应源文件:init.c。执行main方法,执行许多操作。其中一个操作就是读取配置文件init.rc

两个重要的职责:

  1. 负责创建系统中的几个关键进程,比如创建zygote进程。
  2. 提供属性服务(property service),类似于window平台的注册表

zygote

zygote是由init进程根据init.rc文件中的配置项创建的。
它最初的名字是“app_process”,后被替换为“zygote”。
对应的源文件:App_main.cpp。执行main方法。
调用了AppRuntime.start(“com.android.internal.os.zygoteInit”,startSystemServer)方法。由于AppRuntime继承自AndroidRuntime,实际的start方法执行了3步

  1. 创建虚拟机 - startVm
  2. 注册JNI函数 - startReg
  3. 由C调用java代码 - ZygoteInit.java

在**ZygoteInit.java**main函数中,执行5个关键点

  1. 建立IPC通信服务端 - registerZygoteSocket
  2. 预加载类和资源 - preloadClasses和preloadResources
  3. 启动system_server进程 - startSystemServer
  4. 有求必应之等待请求 - runSelectLoopMode
  5. caller.run

这里写图片描述

SystemServer

这里写图片描述

关于zygote分裂

这里写图片描述

0 0