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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## Activity的啟動流程 ![](https://img.kancloud.cn/99/b0/99b0aa24e3c9fa2c6dd6751cab906574_1344x1280.png) ### 整個流程涉及的主要角色有: * Instrumentation: 監控應用與系統相關的交互行為。 * ActivityManagerService(AMS):組件管理調度中心,什么都不干,但是什么都管。 * ActivityStarter:Activity啟動的控制器,處理Intent與Flag對Activity啟動的影響,具體說來有:1 尋找符合啟動條件的Activity,如果有多個,讓用戶選擇;2 校驗啟動參數的合法性;3 返回int參數,代表Activity是否啟動成功。 * ActivityStackSupervisior:這個類的作用你從它的名字就可以看出來,它用來管理任務棧。 * ActivityStack:用來管理任務棧里的Activity。 * ActivityThread:在Android中它就代表了Android的主線程,注意是代表而不是說它就是一個Thread類,它是創建完新進程之后(肯定是在 * 一個線程中啊),main函數被加載,然后執行一個loop的循環使當前線程進入消息循環,并且作為主線程。 * ApplicationThread:最終干活的人,是ActivityThread的內部類,也是一個Binder對象。在此處它是作為IApplicationThread對象的server端等待client端的請求然后進行處理,最大的client就是AMS.Activity、Service、BroadcastReceiver的啟動、切換、調度等各種操作都在這個類里完成。 注意:這里單獨提一下ActivityStackSupervisior,這是高版本才有的類,它用來管理多個ActivityStack,早期的版本只有一個ActivityStack對應著手機屏幕,后來高版本支持多屏以后,就有了多個ActivityStack,于是就引入了ActivityStackSupervisior用來管理多個ActivityStack。 ### 整個流程主要涉及四個進程: * 調用者進程,如果是在桌面啟動應用就是Launcher應用進程。 * ActivityManagerService等所在的System Server進程,該進程主要運行著系統服務組件。 * Zygote進程,該進程主要用來fork新進程。 * 新啟動的應用進程,該進程就是用來承載應用運行的進程了,它也是應用的主線程(新創建的進程就是主線程),處理組件生命周期、界面繪制等相關事情。 ### 整個流程如下 點擊桌面應用圖標,Launcher進程將啟動Activity(MainActivity)的請求以Binder的方式發送給了AMS。 AMS接收到啟動請求后,交付ActivityStarter處理Intent和Flag等信息,然后再交給ActivityStackSupervisior/ActivityStack處理Activity進棧相關流程。同時以Socket方式請求Zygote進程fork新進程。 Zygote接收到新進程創建請求后fork出新進程。 在新進程里創建ActivityThread對象,新創建的進程就是應用的主線程,在主線程里開啟Looper消息循環,開始處理創建Activity。ActivityThread利用ClassLoader去加載Activity、創建Activity實例,并回調Activity的onCreate()方法。這樣便完成了Activity的啟動。 ## 參考資料 [點擊應用圖標-應用(Activity)的啟動流程](https://blog.csdn.net/zhangqiluGrubby/article/details/80144589) [一張圖弄清Activity的啟動過程](https://juejin.cn/post/6844903790953381896)
                  <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>

                              哎呀哎呀视频在线观看