多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android Zygote源碼分析

Android Zygote源碼分析

來源:程序員人生   發布時間:2015-07-03 08:13:40 閱讀次數:4034次

目錄

  • 目錄
  • 概述
  • zygote分析
  • AppRuntime分析
  • 創建虛擬機startVm
  • 注冊JNI函數startReg
  • 進入JAVA世界
    • 建立IPC通訊服務端registerZygoteSocket
    • 預加載類和資源preload
    • 啟動system_server
    • 有求必應之等待要求runSelectLoop


概述

在Android系統中,所有的利用程序進程,和用來運行系統關鍵服務的System進程都是由zygote進程負責創建的。因此,我們將它稱為進程孵化器。zygote進程是通過復制本身的方式來創建System進程和利用程序進程的。由于zygote進程在啟動時會在內部創建1個虛擬機實例,因此,通過復制zygote進程而得到的System進程和利用程序進程可以快速地在內部取得1個虛擬機實例拷貝。
zygote進程在啟動完成以后,會馬上將System進程啟動起來,以便它可以將系統的關鍵服務啟動起來。下面我們將介紹zygote進程的啟動腳本,然后分析它和System進程的啟動進程。


zygote分析

zygote進程的啟動腳本以下:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class main socket zygote stream 660 root system onrestart write /sys/android_power/request_state wake onrestart write /sys/power/state on onrestart restart media onrestart restart netd

在我之前的1篇博客中已分析了init進程是如何啟動service服務了,需要了解的同學可以參考這篇文章:Android init進程――解析配置文件

通過zygote服務的啟動腳本,我們可以知道,zygote進程的實際是2進制文件app_process的調用,我們就從這個利用程序的main函數入手去分析1下zygote進程的啟動進程,源碼以下(/frameworks/base/cmds/app_process/app_main.cpp):

/** * 將-Xzygote加入到JavaVMOption中,返回/system/bin參數指向的下標 */ int AndroidRuntime::addVmArguments(int argc, const char* const argv[]) { int i; for (i = 0; i < argc; i ++) { if (argv[i][0] != '-') { return i; } if (argv[i][1] == '-' && argv[i][2] == 0) { return i + 1; } JavaVMOption opt; memset(&opt, 0, sizeof(opt)); opt.optionString = (char*)argv[i]; mOptions.add(opt); } return i; } int main(int argc, char* const argv[]) { // zygote call parameters // /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server // These are global variables in ProcessState.cpp mArgC = argc; mArgV = argv; mArgLen = 0; for (int i = 0; i < argc; i ++) { mArgLen += strlen(argv[i]) + 1; } // 去除末尾的空格 mArgLen--; AppRuntime runtime; const char* argv0 = argv[0]; // Process command line arguments // ignore argv[0] argc --; argv ++; // Everything up tp '--' or first non '-' arg goes to the vm int i = runtime.addVmArguments(argc, argv); // Parse runtime arguments. Stop at first unrecognized option. bool zygote = false; bool startSystemServer = false; bool application = false; const char* parentDir = NULL; const char* niceName = NULL; const char* className = NULL; while (i < argc) { const char* arg = argv[i ++]; if (!parentDir) { parentDir = arg; } else if (strcmp(arg, "--zygote") == 0) { zygote = true; niceName = "zygote"; } else if (strcmp(arg, "--start-system-server") == 0) { startSystemServer = true; } else if (strcmp(arg, "--application") == 0) { application = true; } else if (strncmp(arg, "--nice-name=", 12)) { niceName = arg + 12; } else { className = arg; break; } } if (niceName && *niceName) { setArgv0(argv0, niceName); set_process_name(niceName); } runtime.mParentDir = parentDir; if (zygote) { // 進入到AppRuntime的start函數 runtime.start("com.android.internal.os.ZygoteInit", startSystemServer? "start-system-server" : ""); } else if (className) { runtime.mClassName = className; runtime.mArgc = argc - i; runtime.mArgv = argv + i; runtime.start("com.android.internal.os.RuntimeInit", application ? "application" : "tool"); } else { fprintf("stderr", "Error: no class name or --zygote supplied. "); app_usage(); LOG_ALWAYS_FATAL("app_process: no class name or --zygote supplied"); return 10; } }

在zygote的main函數中,通過AppRuntime runtime代碼創建了1個AppRuntime對象runtime,接下來Zygote進程就是通過它來進1步啟動的。
init.rc中關于啟動zygote命令中包括了

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人网在线观看 | 国产人澡人澡澡澡人碰视频 | yellow中文字幕在线高清 | 亚洲精品国产成人99久久 | 亚洲欧美色视频 | 日本高清www视频在线观看 | 香蕉高清免费永久在线视频 | 97夜夜操| 国产在线a | 国产视频在线一区 | 一二三四免费手机在线观看视频 | 一级毛片免费视频观看 | 国产欧美国产精品第二区 | 爱爱网网站免费观看 | 日本不卡视频网站 | 亚洲综合日韩欧美一区二区三 | 综合欧美一区二区三区 | 精品伊人久久久 | 日韩 欧美 综合 | 性生生活三级视频观看 | 美女视频一区二区三区 | 国产亚洲美女精品久久久久 | 中文国产成人精品少久久 | 91精品福利观看 | 在线高清美女视频免费看 | 香蕉高清免费永久在线视频 | 欧美激情免费a视频 | 尤物视频在线观看免费 | 性freemovies中国群众 | 亚洲中字| 色吊丝一区二区 | 小说区图片区综合久久亚洲 | 国产精品ⅴ视频免费观看 | 日韩欧美久久一区二区 | 成人a毛片久久免费播放 | 91人人区免费区人人 | 日本a级精品一区二区三区 日本a级毛片免费视频播放 | 精品成人乱色一区二区 | 欧美黑人巨大videos异族 | 国产亚洲欧美在线播放网站 | 欧美日韩久久中文字幕 |