<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Android 啟動過程詳解 Android從Linux系統啟動有4個步驟; (1) init進程啟動 (2) Native服務啟動 (3) System Server,Android服務啟動 (4) Home啟動 總體啟動框架圖如: [![image](https://box.kancloud.cn/2016-05-05_572b1a18a9ae1.gif "image")](http://hi.csdn.net/attachment/201005/14/0_1273850751070U.gif) ### 第一步:initial進程(system/core/init) init進程,它是一個由內核啟動的用戶級進程。內核自行啟動(已經被載入內存,開始運行,并已初始化所有的設備驅動程序和數據結構等)之后,就通過啟動一個用戶級程序init的方式,完成引導進程。init始終是第一個進程. Init.rc Init.marvell.rc ![](https://box.kancloud.cn/2016-05-05_572b1a18c2b7a.gif) Init進程一起來就根據init.rc和init.xxx.rc腳本文件建立了幾個基本的服務: - ?servicemanamger - ?zygote 。。。 最后Init并不退出,而是擔當起property service的功能。 #### 1.1腳本文件 init@System/Core/Init Init.c: parse_config_file(Init.rc) @parse_config_file(Init.marvel.rc) 解析腳本文件:Init.rc和Init.xxxx.rc(硬件平臺相關) Init.rc是Android自己規定的初始化腳本(Android Init Language, System/Core/Init/readme.txt) 該腳本包含四個類型的聲明: - Actions - Commands - Services - Options. #### 1.2 服務啟動機制 我們來看看Init是這樣解析.rc文件開啟服務的。 (1)打開.rc文件,解析文件內容@ system/core/init/init.c 將service信息放置到service_list中。@ system/core/init parser.c (2)restart_service()@ system/core/init/init.c service_start execve(…).建立service進程。 ### 第二步 Zygote Servicemanager和zygote進程就奠定了Android的基礎。Zygote這個進程起來才會建立起真正的Android運行空間,初始化建立的Service都是Navtive service.在.rc腳本文件中zygote的描述: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server 所以Zygote從main(…)@frameworks/base/cmds/app_main.cpp開始。 (1) main(…)@frameworks/base/cmds/app_main.cpp - 建立Java Runtime - runtime.start("com.android.internal.os.ZygoteInit", startSystemServer); (2) runtime.start@AndroidRuntime.cpp - 建立虛擬機 - 運行:com.android.internal.os.ZygoteInit:main函數。 (3)main()@com.android.internal.os.ZygoteInit//正真的Zygote。 - registerZygoteSocket();//登記Listen端口 - startSystemServer(); - 進入Zygote服務框架。 經過這幾個步驟,Zygote就建立好了,利用Socket通訊,接收ActivityManangerService的請求,Fork應用程序。 ### 第三步 System Server [startSystemServer@com.android.internal.os.ZygoteInit在Zygote](#)上fork了一個進程:?com.android.server.SystemServer.于是SystemServer@(SystemServer.java)就建立了。Android的所有服務循環框架都是建立SystemServer@(SystemServer.java)上。在SystemServer.java中看不到循環結構,只是可以看到建立了init2的實現函數,建立了一大堆服務,并AddService到service Manager。 ~~~ main() @ com/android/server/SystemServer { init1(); } ~~~ Init1()是在Native空間實現的(com_andoird_server_systemServer.cpp)。我們一看這個函數就知道了,init1->system_init() @System_init.cpp 在system_init()我們看到了循環閉合管理框架。 ~~~ { Call "com/android/server/SystemServer", "init2" ….. ProcessState::self()->startThreadPool(); ?? IPCThreadState::self()->joinThreadPool(); } ~~~ init2()@SystemServer.java中建立了Android中所有要用到的服務。 這個init2()建立了一個線程,來New Service和AddService來建立服務 ### 第三步 Home啟動 [在ServerThread@SystemServer.java](#)后半段,我們可以看到系統在啟動完所有的Android服務后,做了這樣一些動作: (1) 使用xxx.systemReady()通知各個服務,系統已經就緒。 (2)? 特別對于ActivityManagerService.systemReady(回調) Widget.wallpaper,imm(輸入法)等ready通知。 Home就是在ActivityManagerService.systemReady()通知的過程中建立的。下面是ActivityManagerService.systemReady()的偽代碼: systemReady()@ActivityManagerService.java resumeTopActivityLocked() startHomeActivityLocked();//如果是第一個則啟動HomeActivity。 startActivityLocked(。。。)CATEGORY_HOME
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看