Android啟動研究(一)

來源:互聯網
上載者:User

我對這個檔案還沒仔細研究過,不過一個網友突然問了我一個問題,我也還是大概的知道一些。

    android的系統應用中的一個重要的進程就是zygote,所有的java應用程式進程都是由zygote派生出來的,zygote這個進程的作用就是“生兒子”。具體的一個應用如何出來的大家可以看我以前的一篇文章-----Android 應用初始化及表單事件的分發。

   首先要瞭解一點初始化語言的基本知識吧:

Services(服務)是一個程式,他在初始化時啟動,並在退出時重啟(可選)。Services(服務)的形式如下:

       service <name> <pathname> [ <argument> ]*
          <option>
          <option>
Options為選項,具體可以參考linux service命令

zygote進程正是在linux kernel startup後通過這個檔案啟動的,具體看init.rc中這一段:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    socket zygote stream 666
    onrestart write /sys/android_power/request_state wake
    onrestart write /sys/power/state on

一段一段的分析這個代碼:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

啟動服務名字zygote.   /system/bin/app_process 進程的bin檔案具體路徑,後面跟的就是啟動參數-Xzygote /system/bin --zygote --start-system-server。這段參數有什麼作用可以對照看代碼app_main.cpp

if (i < argc) {
        arg = argv[i++];
        if (0 == strcmp("--zygote", arg)) {
            bool startSystemServer = (i < argc) ? 
                    strcmp(argv[i], "--start-system-server") == 0 : false;
            setArgv0(argv0, "zygote");
            set_process_name("zygote");
           runtime.start("com.android.internal.os.ZygoteInit",
                startSystemServer);
        } else {
            set_process_name(argv0);

            runtime.mClassName = arg;

            // Remainder of args get passed to startup class main()
            runtime.mArgC = argc-i;
            runtime.mArgV = argv+i;

            LOGV("App process is starting with pid=%d, class=%s./n",
                 getpid(), runtime.getClassName());
            runtime.start();
        }
    }

-Xzygote 這個參數的意義是在jvm中設定gDvm.zygote = true;至於這個參數的具體作用大家自己看代碼吧。 其流程是 androidRuntime->start() call---> JNI_CreateJavaVM() call ---->dvmStartup()(戴維林虛擬機器初始化) call---->dvmProcessOptions().

/system/bin :也許是告知系統應用的路徑吧,大家看到了告訴我。

onrestart write /sys/android_power/request_state wake:

如果這個服務重啟了,開啟/sys/android_power/request_state 這個檔案寫入wake字串。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.