<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android Zygote 啟動流程

      Zygote 進程介紹

      介紹

      • 在 Android 中,DVM、ART、和應(yīng)用程序進程以及系統(tǒng)關(guān)鍵服務(wù)的 SystemServer 進程都是由 Zygote 進程創(chuàng)建,它被稱為孵化器
      • 通過 fork 方式,創(chuàng)建應(yīng)用程序進程和 SystemServer 進程,由于 Zygote 進程在啟動的時候會創(chuàng)建 DVM 或者 ART,因為通過 fork 而創(chuàng)建的應(yīng)用程序和 SystemServer 進程可以在內(nèi)部獲取一個 DVM 或者 ART 實例

      Zygote 啟動

      • Zygote 的啟動是由 init.rc 腳本文件拉起來的。由 Android Init Language 編寫而成的
      • 這些 zygote 啟動腳本都放在 Android 源碼的 system/core/rootdir 目錄中
      //init.rc
      import /init.${ro.zygote}.rc
      

      在 init.rc 中,啟動 Zygote 并不是直接將啟動的文件寫死,而是根據(jù) ro.zygote 的屬性值來決定導(dǎo)入哪個版本的文件。
      ro.zygote 取值有 4 種,也就意味著 Zygote 支持 4 種版本

      init.zygote32.rc
      init.zygote32_64.rc
      init.zygote64.rc
      init.zygote64_32.rc
      

      init.zygote32.rc

      只支持 32 bit 應(yīng)用程序

      service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
          class main
          priority -20
          user root
          group root readproc reserved_disk
          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/tasks
      
      • 根據(jù) Service 類型語句的格式,得知函數(shù)名為 zygote,執(zhí)行程序路徑為 /system/bin/app_process/,類名為 main

      init.zygote32_64.rc

      表示既支持 32 bit,又支持 64 bit 應(yīng)用程序

      service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote
          class main
          priority -20
          user root
          group root readproc reserved_disk
          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/tasks
      
      service zygote_secondary /system/bin/app_process64 -Xzygote /system/bin --zygote --socket-name=zygote_secondary
          class main
          priority -20
          user root
          group root readproc reserved_disk
          socket zygote_secondary stream 660 root system
          onrestart restart zygote
          writepid /dev/cpuset/foreground/tasks
      
      • 腳本會啟動兩個 Service,也就說會啟動兩個 Zygote 進程,一個名稱叫 zygote,執(zhí)行程序路徑為 /system/bin/app_process32,作為主模式,另一個是 zygote_secondary,執(zhí)行程序路徑為 /system/bin/app_process64,作為輔模式

      init.zygote64.rc 和 init.zygote64_32.rc

      與上兩個腳本類似,不在贅述

      Zygote 啟動過程

      main() 函數(shù)

      腳本啟動 Zygote 后首先執(zhí)行 frameworks/base/cmds/app_process/app_main.cpp/main() 中的代碼

      image

      • main 會啟動 zygote,systemserver 和 application 三種類型的進程。根據(jù)傳入的參數(shù)區(qū)別去啟動不同類型的進程。
      • 啟動進程的方法是使用 AppRuntime 類去調(diào)用 AndroidRuntime 啟動 Android 進程。

      AndroidRuntime.cpp

      • 該文件位于 frameworks/base/core/ 文件夾中
      • 該文件是用于啟動 Android 服務(wù)的,包括 Zygote,SystemServer,application 等

      image

      ZygoteInit.java

      • ZygoteInit.java 文件位于 /frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
      • ZygoteInit的main方法主要做了4件事:
        1. 創(chuàng)建一個Server端的Socket。
        2. 預(yù)加載類和資源。
        3. 啟動SystemServer進程。
        4. 等待AMS請求創(chuàng)建新的應(yīng)用程序進程。

      image

      Zygote 進程總結(jié)

      1. 創(chuàng)建一個 AppRuntime 并調(diào)用其 start 方法,啟動 Zygote 進程
      2. 創(chuàng)建 Java 虛擬機,并為 Java 虛擬機注冊 JNI 方法
      3. 通過 JNI 調(diào)用 ZygoteInit 的 main() 函數(shù)進入 Zygote 的 Java 框架層
      4. 通過 registerZygoteSocket() 創(chuàng)建服務(wù)端 Socket,并通過 runSelectLoop() 方法等待 AMS 請求創(chuàng)建新的應(yīng)用進程
      5. 啟動 SystemServer 進程
      posted @ 2024-03-27 14:02  王清河  閱讀(522)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本一区二区三区四区黄色| 精品久久一线二线三线区| 加勒比精品一区二区三区| japanese无码中文字幕| 蜜桃视频一区二区在线观看| 国产午夜精品福利免费看| 在线a级毛片免费视频| 亚洲欧美一区二区成人片| 亚洲精品国产suv一区88| 国内精品极品久久免费看| 99中文字幕国产精品| 啦啦啦视频在线日韩精品| 马关县| 亚洲精品福利一区二区三区蜜桃| 精品亚洲欧美无人区乱码| 国产精品国三级国产av| 亚洲精品国产综合久久一线| 欧美日韩一区二区综合| 日本亲近相奷中文字幕| 日本一区二区精品色超碰| 中国熟妇毛多多裸交视频| 白丝乳交内射一二三区| 高清不卡一区二区三区| 国产精品视频中文字幕| 青州市| 亚洲综合精品香蕉久久网| 国产丰满乱子伦无码专区| 免费无码av片在线观看网站| 国语自产拍精品香蕉在线播放 | 国产精品日本一区二区不卡视频| 人妻无码| 日韩AV高清在线看片| 99久久精品一区二区国产| 最新精品露脸国产在线| 免费人妻无码不卡中文字幕18禁| 久久精品国产亚洲av天海翼| 久久久久国产精品人妻| 午夜色大片在线观看免费| 99riav国产精品视频| 奇米777四色在线精品| 亚洲中文字幕精品无人区|