<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之旅 廣告
                [TOC] 參加官方文檔:[https://developer.android.com/topic/performance/vitals/launch-time?hl=zh-cn#top\_of\_page](https://developer.android.com/topic/performance/vitals/launch-time?hl=zh-cn#top_of_page) # 應用啟動內部機制 應用有三種啟動狀態,冷啟動中應用從頭開始啟動,其他狀態下系統需要將后臺運行的應用帶入前臺,我們在冷啟動的基礎上進行優化,可以最大限度的提升應用性能 ## 冷啟動 出現場景: * 設備剛開機,啟動應用時 * 系統終止應用進程(或用戶手動劃掉應用),再次重新打開時 冷啟動分為三步: 1、加載并啟動應用 2、在啟動后立即顯示應用的空白啟動窗口 3、創建應用進程。系統首次完成應用繪制后,會換掉應用的空白啟動窗口,展示具體的UI ![](https://img.kancloud.cn/e9/da/e9da638899d71a2b75ae313b3de26917_983x611.png) ## 熱啟動 出現場景: * 用戶直接點擊Home鍵回到主頁或最近應用鍵到其他應用,再次返回本應用時 熱啟動中,系統的所有工作就是將后臺的 Activity 帶到前臺。如果應用的所有 Activity 都還駐留在內存中,則應用可以無須重復對象初始化、布局擴充和呈現。熱啟動顯示的屏幕上行為和冷啟動場景相同,即系統進程顯示空白屏幕,直到應用完成 Activity 呈現。 ## 溫啟動 出現場景: * 用戶退出應用,但并未直接結束掉(劃掉)進程 * 應用被回收,重新打開時(onCreate中會拿到回收時保存的實例狀態) 溫啟動的開銷比熱啟動多,用戶退出應用,之后又重新啟動,進程可能已經繼續運行,但是Activity需要重新創建。 # 檢測和診斷問題 應用啟動時間過長時,Google Play管理中心可協助提醒我們,此情況在國內環境中暫不使用,但其標準可以做個參考。Android Vitals 在應用出現以下情況時將其啟動時間視為過長: * 冷啟動用了 5 秒或更長時間 * 溫啟動用了 2 秒或更長時間 * 熱啟動用了 1.5 秒或更長時間 ## 初步顯示啟動所用時間 在 Android 4.4(API 級別 19)及更高版本中,logcat 包括一個輸出行,其中包含名為`Displayed`的值。此值代表從啟動進程到在屏幕上完成對應 Activity 繪制所經過的時間。經過的時間包括以下事件序列: 1. 啟動進程。 2. 初始化對象。 3. 創建并初始化 Activity。 4. 擴充布局。 5. 首次繪制應用。 報告的日志行類似于以下示例: ```plain ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms ``` 也可以使用 ADB Shell Activity Manager 命令運行應用來測量初步顯示所用時間。 ## 完全顯示啟動所用時間 某些情況下Activity視圖會出現延遲加載的情況,比如界面中網絡請求獲取到的圖片就會因網絡環境不同而延遲加載,我們可以在Activity中手動調用`reportFullyDrawn()`方法,來測量從應用啟動到完全顯示所有資源和視圖層次結構所經過的時間。 # 問題和優化方案 ## 常見影響啟動時間的問題 ### 1、密集型應用初始化 即在Application的onCreate方法中執行了過多操作。 優化解決方案: * 延遲初始化對象,僅初始化立即需要的對象 * 不要在Application中創建全局靜態對象,而是移動到單例模式中 * 考慮使用依賴注入框架(如Dagger),在首次注入時創建對象和依賴項 ### 2、密集型Activity初始化 創建 Activity 通常需要進行大量的高開銷工作,通常有機會優化這項工作以實現性能改進。通常視圖層次結構越大,應用擴充它所花的時間就越長;并且在主線程初始化資源也可能會降低啟動速度。 優化解決方案: * 減少冗余或嵌套布局,優化布局結構 * 不要擴充在啟動期間無需顯示的界面部分,考慮使用ViewStub對象在更合適的時機擴充 * 在子線程延遲部分資源的初始化 * 允許應用先加載并顯示您的視圖,稍后再更新依賴于位圖和其他資源的可視屬性 ## 啟動白屏問題與優化 點擊應用圖標,打開App,創建應用進程時,系統會根據清單文件設置的主題顏色來展示一個白屏或黑屏,以給與用戶反饋。當創建應用進程這一步耗時較長時,白屏或黑屏體驗就很不好了,來看看相應的解決方案: ### 1、禁用系統進程繪制時的空白屏幕 將啟動Activity的主題設置為如下即可: ```xml <style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowDisablePreview">true</item> </style> ``` 禁用系統進程繪制時的空白屏幕,可能導致啟動時間更長,最重要的是用戶點擊了圖標后,界面會無響應一段時間,沒有相應的反饋。 ### 2、為啟動Activity自定義主題背景 ```xml <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"> <!-- The background color, preferably the same as your normal theme --> <item android:drawable="@android:color/white"/> <!-- Your product logo - 144dp color version of your app icon --> <item> <bitmap android:src="@drawable/product_logo_144dp" android:gravity="center"/> </item> </layer-list> ``` ```xml <style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowBackground">@drawable/splash_icon</item> </style> ``` 為啟動Activity設置以上主題,這樣自定義的主題背景會替代掉默認的白屏或黑屏。
                  <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>

                              哎呀哎呀视频在线观看