日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android zygote啟動流程詳解

瀏覽:15日期:2022-09-20 09:28:38
對zygote的理解

在Android系統中,zygote是一個native進程,是所有應用進程的父進程。而zygote則是Linux系統用戶空間的第一個進程——init進程,通過fork的方式創建并啟動的。

作用

zygote進程在啟動時,會創建一個Dalvik虛擬機實例,每次孵化新的應用進程時,都會將這個Dalvik虛擬機實例復制到新的應用程序進程里面,從而使得每個應用程序進程都有一個獨立的Dalvik虛擬機實例。

zygote進程的主要作用有兩個:

啟動SystemServer。孵化應用進程。

啟動流程啟動入口

Zygote進程在init進程中,通過解析init.zygote.rc配置文件,以service(服務)的方式啟動并創建的。

以init.zygote32.rc為例來看下:

腳本講解

// systemcorerootdirinit.zygote32.rcservice 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 socket usap_pool_primary stream 660 root system 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

這段腳本要求 init 進程創建一個名為 zygote 的進程,該進程要執行的程序是“/system/bin/app_process”。并且為 zygote 進程創建一個 socket 資源 (用于進程間通信,ActivityManagerService 就是通過該 socket 請求 zygote 進程 fork 一個應用程序進程)。

后面的**--zygote**是參數,表示啟動的是zygote進程。在app_process的main函數中會依據該參數決定執行ZygoteInit還是Java類。

啟動過程

zygote要執行的程序便是system/bin/app_process,它的源代碼在frameworks/base/cmds/app_process/app_main.cpp

App_main::main

int main(int argc, char* const argv[]){ ... while (i < argc) { const char* arg = argv[i++]; if (strcmp(arg, '--zygote') == 0) {//是否有--zygote參數。這個是啟動zygote進程的時候的參數 zygote = true;//進程名稱,設置為zygote niceName = ZYGOTE_NICE_NAME; } else if (strcmp(arg, '--start-system-server') == 0) {//是否有--start-system-server startSystemServer = true;.... if (zygote) {//最最重要方法。。。如果是zygote進程,則啟動ZygoteInit。 runtime.start('com.android.internal.os.ZygoteInit', args, zygote); } else if (className) { runtime.start('com.android.internal.os.RuntimeInit', args, zygote); } else { fprintf(stderr, 'Error: no class name or --zygote supplied.n'); app_usage(); LOG_ALWAYS_FATAL('app_process: no class name or --zygote supplied.'); }}AndroidRuntime::start

void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote){ ... JNIEnv* env;//重點方法 創建VM虛擬機,參數是指針,可以用于獲取返回的值,可以使用env來和Java層來做交互 if (startVm(&mJavaVM, &env, zygote) != 0) { return; } onVmCreated(env); //重點方法 給虛擬機注冊一些JNI函數,(系統so庫、用戶自定義so庫 、加載函數等。) if (startReg(env) < 0) { ALOGE('Unable to register all android nativesn'); return; } //找到類的main方法,并調用。如果是zygote的話,這里就會啟動ZygoteInit類的main方法 jmethodID startMeth = env->GetStaticMethodID(startClass, 'main', '([Ljava/lang/String;)V'); if (startMeth == NULL) { ALOGE('JavaVM unable to find main() in ’%s’n', className); /* keep going */ } else { //調用main方法。這里通過JNI調用Java方法之后,Zygote(Native層)就進入了Java的世界,從而開啟了Android中Java的世界。 env->CallStaticVoidMethod(startClass, startMeth, strArray);}

App_main.main AndroidRuntime.start startVm//創建虛擬機 startReg//注冊JNI函數 ZygoteInit.main//這里就進入到了Java層了 registerZygoteSocket//建立IPC的通訊機制 preload//預加載類和資源 startSystemServer//啟動system_server runSelectLoop//等待進程創建的請求

對應的源碼地址: /frameworks/base/cmds/app_process/App_main.cpp (內含AppRuntime類) /frameworks/base/core/jni/AndroidRuntime.cpp /frameworks/base/core/java/com/android/internal/os/ZygoteInit.java /frameworks/base/core/java/com/android/internal/os/Zygote.java /frameworks/base/core/java/android/net/LocalServerSocket.java

Zygote進程的啟動過程中,除了會創建一個Dalvik虛擬機實例之外,還會將Java運行時庫加載到進程中,以及注冊一些Android核心類的JNI方法到創建的Dalvik虛擬機實例中。

zygote進程初始化時啟動虛擬,并加載一些系統資源。這樣zygote fork出子進程之后,子進程也會繼承能正常工作的虛擬機和各種系統資源,剩下的只需要裝載APK文件的字節碼就可以運行程序,。

Java應用程序不能以本地進程的形態運行,必須在一個獨立的虛擬機中運行。如果每次都重新啟動虛擬機,肯定就會拖慢應用程序的啟動速度。

注意:APK應用程序進程被zygote進程孵化出來以后,不僅會獲得Dalvik虛擬機實例拷貝,還會與Zygote一起共享Java運行時庫。

以上就是Android zygote啟動流程詳解的詳細內容,更多關于Android zygote啟動流程的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品观看| 性欧美69xoxoxoxo| 亚洲日韩视频| 亚洲性视频在线| 亚洲综合不卡| 性感美女一区二区在线观看| аⅴ资源天堂资源库在线| 久久这里只有精品一区二区| 国产精品亚洲四区在线观看 | 欧美综合国产| 久久狠狠亚洲综合| 久久福利影视| 蜜桃av在线播放| 久久99青青| 黄色成人在线网址| 婷婷色综合网| 日韩天堂在线| 久久国产中文字幕| 亚洲一级少妇| 秋霞影视一区二区三区| 国内自拍视频一区二区三区| 亚洲神马久久| 中文字幕高清在线播放| 亚洲黄色免费av| av免费不卡国产观看| 久久婷婷亚洲| 久久精品电影| 亚洲天堂资源| 欧美日韩亚洲一区三区| 免费日韩一区二区三区| 美女久久99| 久久中文字幕av| 日韩av中文字幕一区| 日本国产精品| 日韩在线一二三区| 国产日韩亚洲欧美精品| 日韩成人精品一区| 蜜桃视频欧美| 国产欧美激情| 都市激情国产精品| 日韩亚洲在线| 国产精品网在线观看| 久久久久蜜桃| 日韩有码av| av中文资源在线资源免费观看| 伊人久久亚洲热| 蜜桃av一区二区在线观看| 久久亚洲国产精品尤物| 国产一区日韩一区| 91精品啪在线观看国产爱臀| av一区在线| 欧美亚洲tv| 1000部精品久久久久久久久| 欧美一级久久| 久久久久久久久丰满| 97精品久久| 九九综合九九| 欧美黄页在线免费观看| 午夜欧美精品| 久久中文在线| 最新国产精品视频| 成午夜精品一区二区三区软件| 久久国产精品久久w女人spa| 精品日韩在线| 日韩一区二区三区免费视频 | 国产一区二区三区久久| av成人国产| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产伦久视频在线观看| 丝袜脚交一区二区| 视频在线不卡免费观看| 午夜性色一区二区三区免费视频| 日本不卡免费高清视频在线| 亚洲精品人人| 99久精品视频在线观看视频| 国产精品入口久久| 石原莉奈在线亚洲二区| 国产 日韩 欧美一区| 国产日韩在线观看视频| 一区在线观看| 日韩欧美一区二区三区免费看| 日韩av中文字幕一区二区三区| 欧美福利专区| 综合日韩av| 97久久亚洲| 亚洲欧美日本日韩| 久久狠狠婷婷| 国产一区2区| 国产精品伊人| 日本一不卡视频| 亚洲欧美日本国产专区一区| 91看片一区| 国产96在线亚洲| 国产精品欧美一区二区三区不卡| 亚洲少妇诱惑| 黄色不卡一区| 99久久精品网| 成人美女视频| 国产精品久久久久久久久久10秀 | 亚洲一区二区免费看| 亚洲va中文在线播放免费| 嫩草伊人久久精品少妇av杨幂| 日韩国产在线观看一区| 亚洲色图综合| 综合国产精品| 久久国产精品亚洲77777| 亚洲福利国产| 99久精品视频在线观看视频| 国产在线一区不卡| 欧美国产中文高清| 国产免费久久| 国产欧美日韩视频在线| 欧美天堂在线| 日韩一区二区三区在线看| 亚洲理论在线| 蜜桃久久精品一区二区| 一区二区亚洲视频| 亚洲五月综合| 综合激情网站| 日本成人手机在线| 色8久久久久| 91嫩草精品| 国产欧美69| 美女视频黄免费的久久| 国产精品日韩精品中文字幕| 国产伦精品一区二区三区在线播放| 91亚洲精品视频在线观看| 国产亚洲一区二区三区不卡| 亚洲视频国产| 日韩高清成人在线| 国产日韩亚洲欧美精品| 国产高清亚洲| 欧美一区=区| 中文字幕免费一区二区| 日韩欧美在线精品| 国产一精品一av一免费爽爽| 国产精品亚洲二区| 久久精品亚洲一区二区| 成人精品国产亚洲| 成人免费网站www网站高清| 亚洲免费观看高清完整版在线观| 亚洲精品乱码| 国产精品白浆| 国产伊人久久| 久久男女视频| 美女网站久久| 国产欧美啪啪| 亚洲黄色免费av| 黑丝一区二区三区| 综合色就爱涩涩涩综合婷婷| 国产欧美自拍| av综合电影网站| 亚洲一区二区三区高清不卡| 亚洲免费福利一区| 国产精品sm| 欧美成人a交片免费看| 一区在线视频观看| 日韩黄色免费网站| 国产精品最新| 丝袜诱惑一区二区| 国产精品日韩久久久| 亚洲2区在线| 久久97久久97精品免视看秋霞| 日韩另类视频| 三级欧美在线一区| 国产精品**亚洲精品| 日韩欧美网址| 中文字幕视频精品一区二区三区| 欧美黄色精品| 激情综合网站| 日韩av一区二区在线影视| 国产一区二区三区亚洲综合| 一区在线免费| 日韩激情一区二区| 欧美成人精品三级网站| 亚洲开心激情| 日韩伦理一区| 亚州国产精品| 伊伊综合在线| 亚洲精品无播放器在线播放| 国产一区二区三区国产精品| 麻豆精品网站| 精品伊人久久久| 久久国产88| 欧美xxxx中国| 亚洲tv在线| 久久久久一区| 国产精品网站在线看| 久久精品国产大片免费观看| 国产日韩欧美一区二区三区 | 日韩国产精品久久久久久亚洲| 日韩欧美二区| 欧美一区免费| 不卡中文字幕| 成人午夜网址| 亚洲区欧美区| 色在线中文字幕| 国产欧美日本| 免费精品国产的网站免费观看| 国产日韩欧美一区二区三区|