Android 启动

Android 底层是 Linux 系统,Linux 启动后的第一个进程是 init, init 通过 init.rc 配置文件启动一系列的进程,其中 zygote 进程是 Android 系统的核心,是一个 Android 进程的孵化器,所有 Android 进程都是基于这个进程克隆出来的,包括 system_service。

 

Android Zygote_第1张图片

init

init.zygote64_32.rc

service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote    class main    priority -20    user root    group root readproc    socket zygote stream 660 root system    onrestart write /sys/android_power/request_state wake    onrestart write /sys/power/state on    onrestart restart audioserver    onrestart restart cameraserver    onrestart restart media    onrestart restart netd    onrestart restart wificond    writepid /dev/cpuset/foreground/tasksservice zygote_secondary /system/bin/app_process32 -Xzygote /system/bin --zygote --socket-name=zygote_secondary --enable-lazy-preload    class main    priority -20    user root    group root readproc    socket zygote_secondary stream 660 root system    onrestart restart zygote    writepid /dev/cpuset/foreground/tasks

64 位系统启动了两个 zygote, zygote_secondary 是 32 位的。

app_process

app_process 代码位于 frameworks/base/cmds/app_process,逻辑很简单,启动 java 类 ZygoteInit.

int main(int argc, char * const argv[]) {    AppRuntime runtime(argv[0], computeArgBlockSize(argc, argv));    // 解析参数 argv, 然后启动 ZygoteInit    ......    if (zygote) {        runtime.start("com.android.internal.os.ZygoteInit", args, zygote);    }    ......}

ZygoteInit

ZygoteInit 初始化 Android 环境, 启动系统服务进程 system_server,最后进入 socket s服务器监听模式,根据客户端请求 fork 应用进程。

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

public static void main(String argv[]) {    ZygoteServer zygoteServer = new ZygoteServer();    ......    zygoteServer.registerServerSocketFromEnv(socketName); //启动 socket 服务    preload(bootTimingsTraceLog); // 预先加载基础类和资源    ......    if (startSystemServer) {        Runnable r = forkSystemServer(abiList, socketName, zygoteServer);        // zygote 进程 r == null, 子进程 system_server r != null        if (r != null) {            r.run();            return        }    }    caller = zygoteServer.runSelectLoop(abiList);}

更多相关文章

  1. Android启动流程分析(二) init进程的启动
  2. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写
  3. Android 图形系统SurfaceFlinger
  4. android SDK系统图片资源的路径。
  5. android跨进程通讯一:android中跨进程通讯的4种方式
  6. Android——从init进程启动流程
  7. Android 调用系统的拍相程序进行录像
  8. android答题系统(二):实现主界面入口和查询数据

随机推荐

  1. 浅析移动开发
  2. 通过aidl service调用activity
  3. android apk 应用 重新签名 方法
  4. Android(安卓)开发艺术探索读书笔记 9 --
  5. Android版本管理(git 和 repo)
  6. arcgis for android 学习 - (4) 了解mapV
  7. 用python开发android应用 【转载】
  8. android瀑布流,完美解决滑动过程中item位
  9. Android(安卓)Studio 预览-全屏
  10. Android实现>>>百度GPS定位