<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 應用啟動 ![](https://img.kancloud.cn/42/70/427048d32a720ee877ee4719d8d6c133_908x858.png) ![](https://img.kancloud.cn/ec/d9/ecd945f050540487f48fdea5087b5d84_960x720.png) ![](https://img.kancloud.cn/d2/6a/d26ae9b6124979a0a418d366a272d847_1817x1750.png) ## 問題 ### ActivityThread 是什么,它是一個線程嗎,如何被啟動的? 它不是一個線程,它是運行在 App 進程中的主線程中的一個方法中。當 App 進程創建時會執行 ActivityThread.main(),ActivityThread.main() 首先會創建 Looper 執行 Looper.prepareMainLooper();然后創建 ActivityThread 并調用 ActivityThread.attach() 方法告訴 ActivityManagerService 我們創建了一個應用 并將 ApplicationThread 傳給 ActivityManagerService;最后調用 Looper.loop()。 ### ActivityClientRecord 與 ActivityRecord 是什么? 記錄 Activity 相關信息,比如:Window,configuration,ActivityInfo 等。 ActivityClientRecord 是客戶端的,ActivityRecord 是 ActivityManagerService 服務端的。 ### Context 是什么,ContextImpl,ContextWapper 是什么? Context 定義了 App 進程的相關環境,Context 是一個接口,ContextImpl 是子類,ContextWapper 是具體實現。 應用資源是在 Application 初始化的時候,也就是創建 Application,ContextImpl 的時候,ContextImpl 就包含這個路徑,主要就是對就是 ResourcesManager 這個單例的引用。 可以看出每次創建 Application 和 Acitvity 以及 Service 時就會有一個 ContextImpl 實例,ContentProvider 和B roadcastReceiver 的 Context 是其他地方傳入的。 所以 Context 數量 = Application 數量 + Activity 數量 + Service 數量,單進程情況下 Application 數量就是 1。 ### Instrumentation 是什么? 管理著組件Application,Activity,Service等的創建,生命周期調用。 Application 是什么,什么時候創建的,每個應用程序有幾個 Application? Application 是在 ActivityThread.handleBindApplication() 中創建的,一個進程只會創建一個 Application,但是一個應用如果有多個進程就會創建多個 Application 對象。 ### 點擊 Launcher 啟動 Activity 和應用內部啟動 Activity 的區別? 點擊 Launcher 時會創建一個新進程來開啟 Activity,而應用內打開 Activity,如果 Activity 不指定新進程,將在原來進程打開,是否開啟新進程實在 ActivityManagerService 進行控制的,上面分析得到,每次開啟新進程時會保存進程信息,默認為 應用包名 + 應用UID,打開 Activity 時會檢查請求方的信息來判斷是否需要新開進程。Launcher 打開 Activity 默認 ACTIVITY_NEW_TASK,新開一個 Activity 棧來保存 Activity 的信息。 Activity 啟動過程,onCreate(),onResume() 回調時機及具體作用? Activity.onCreate() 完成了 App 進程,Application,Activity 的創建,調用 setContentView() 給 Activity 設置了 layout 布局。 Activity.onResume() 完成了 Activity 中 Window 與 WindowManager 的關聯,并對所有子 View 進行渲染并顯示。 ## 參考資料 [https://www.jianshu.com/p/9ecea420eb52](https://www.jianshu.com/p/9ecea420eb52)
                  <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>

                              哎呀哎呀视频在线观看