android啟動速度優化
A. Android 11 提高 App 冷啟動速度 5% 以上
在Android 11中引入的IORap功能顯著減少了應用的冷啟動時間,平均提高了5%以上,部分設備甚至達到20%以上。這一改進無需開發者進行任何額外操作,即可享受到優化帶來的便利。
IORap通過預取I/O操作來減少應用啟動時間。許多應用在啟動時耗時過長,主要是因為阻塞I/O導致I/O請求隊列未飽和。預取數據後,同時壓縮I/O操作,應用可以在kernel pagecache中快速訪問預取數據,從而大幅縮短啟動時間。
我們在Google Play Store上對熱門應用進行了測試,發現80%的應用在啟動過程中,因阻塞I/O耗時超過10%,80%的應用耗時超過20%。測試顯示,IORap可以為大多數應用提供性能提升。
作為一個獨立的服務,IORap通過IPC與package manager、activity manager、perfetto服務等交互。其架構圖顯示了與系統服務的交互關系。
IORap基於特定策略預測並預取I/O操作,通過perfetto進行跟蹤記錄。跟蹤記錄了kernel pagecache中的頁面添加和刪除情況。測試表明,跟蹤記錄所導致的開銷可以忽略不計。
通過perfetto trace生成預取列表,包含啟動期間需要讀取的文件信息(名稱、偏移、長度)。IORap分析mm_pagemap事件,並將結果(inode、偏移量、長度)轉換為(名稱、偏移量、長度),存儲在預取列表中。列表以protobuf文件形式保存。
生成預取列表後,後續運行應用時,IORap為應用預取對應數據。在執行完預取操作後,無需繼續使用perfetto trace,開發者無需任何操作。系統在用戶點擊圖標或通過Intent請求時執行預取操作。
預取列表並非永久存在,會因某些事件導致過時並被刪除。當應用更新時,更新過程中可能會改變預取數據,不建議在更新階段預取數據。優化後的應用數據不會改變,這會使預取列表過時,從而開始新一輪的perfetto trace。
通過對比實驗結果,可以確定IORap對於低端機和高端機都有顯著收益,平均啟動速度提升可達26%。對於在啟動期間有大量I/O操作的應用,優化效果尤為明顯,如Spotify在低端設備和高端設備上的優化效果分別達到兩位數。
實驗中發現,IORap性能受預取數據的影響,跟蹤持續時間對IORap至關重要。過短的跟蹤時間導致預取的數據量減少,性能較低;過長的預取可能導致需要預取的數據過多,可能減慢啟動速度。使用ReportFullyDrawn事件的時間戳可以估計跟蹤持續時間,正確調用reportFullyDrawn回調可以提升IORap性能。
未來,我們將專注於優化IORap,目標是進一步提高其性能。我們對IORap的性能表現感到興奮,並計劃在應用啟動分析和解決潛在性能問題方面進行優化。
總結:調用reportFullyDrawn來幫助IORap優化應用啟動過程,可以進一步減少I/O阻塞時間。對於應用啟動性能的持續改進,考慮對應用啟動過程進行深入分析和優化。
B. androidapp啟動速度優化
優化Android App啟動速度是提升用戶體驗的關鍵環節。在應用啟動時,用戶往往能明顯感受到屏幕的白屏或黑屏,這直接影響了第一印象和整體體驗。在啟動過程中,系統首先檢查進程是否存在,若不存在則進行冷啟動。這一過程中,系統會處理服務,創建進程,最後執行啟動Activity操作。用戶在這一階段通常看到的是白屏或黑屏,這是由於系統和應用的初始化過程所需的時間。
為解決此問題,一種策略是將自定義的`windowbackground`設置為默認顯示的背景圖片。然而,這會導致所有Activity啟動時都先顯示該背景,如果是透明背景,則可能會出現點擊圖標無反應的情況。為避免這一問題,可以創建一個專門的主題,僅在應用啟動時使用,確保其他Activity的樣式保持不變。
以QQ應用為例,其在Application階段不初始化任何內容,將啟動時間優化至極致。但大多數應用無需達到如此極致的速度,如騰訊系和阿里系應用,通常在啟動時僅顯示一張圖片,隨後展示約3秒的廣告,利用這段時間進行初始化操作。
為了更深入地優化啟動速度,可以使用Google提供的工具進行代碼執行時間的分析。通過查看AM.java在系統源碼中的路徑,可以了解各個組件的啟動時間。此外,Android開發中還有許多優化方向,如通過開啟線程處理不涉及UI操作和非同步要求不高的任務,以及採用懶載入策略,即在需要時才初始化如網路或資料庫操作。
總的來說,優化Android App啟動速度涉及多個層面,從解決白屏黑屏問題到進行更深層次的代碼分析和優化策略實施。深入理解啟動優化中的技術細節,結合實際應用需求,可以顯著提升用戶體驗。更多關於Android優化的知識和技術,可以在《Android核心優化類目》中找到相關的記錄和指導。