【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★
文章目錄
- 一、 常用的耗時方法優化方案 ( 重要 )
- 二、 源碼分析梳理
- 1. 應用啟動時間計算相關源碼分析
- 2. Launcher 應用中啟動 Android 應用流程
- 三、 啟動白屏解決方案
Android 應用啟動優化總結 :
1 . 查看應用啟動時間 : 應用啟動優化引入 ;
- 【Android 性能優化】應用啟動優化 ( 啟動白屏問題 | 應用啟動時間測量 | 冷啟動 | 熱啟動 | 應用啟動時間計算源碼分析 )
2 . 啟動白屏的解決方案 : 設置圖片背景 , 或透明背景 , 這是個權宜之計 , 并不能根本性解決啟動慢的問題 , 只是讓用戶體驗效果好一些 ;
- 【Android 性能優化】應用啟動優化 ( 主題背景圖片設置 | 設置透明主題背景 | 設置應用啟動主題背景、啟動后恢復主題 )
3 . 分析優化哪些項目 : 這三篇博客詳細分析了從 Launcher 應用中啟動第三方應用的整體流程 , 步驟 , 進而分析出應該優化哪些條目 ;
【Android 性能優化】應用啟動優化 ( 安卓應用啟動分析 | Launcher 應用簡介 | Launcher 應用源碼簡介 | Launcher 應用快捷方式圖標點擊方法分析 )
【Android 性能優化】應用啟動優化 ( 安卓應用啟動分析 | Launcher 應用啟用普通安卓應用 | 應用進程分析 )
【Android 性能優化】應用啟動優化 ( 安卓應用啟動分析 | ActivityThread 主函數分析 | 應用初始化 | 啟動優化項目 )
4 . 使用 Trace 分析每個方法的執行時間 : 使用方法跟蹤 , 可以找出哪個方法耗時較長 , 需要優化 ;
-
【Android 性能優化】應用啟動優化 ( 啟動優化項目 | 界面啟動時間 | 啟動優化項目 | 方法追蹤 MethodTracing )
-
【Android 性能優化】應用啟動優化 ( 方法追蹤代碼模板 | 示例項目 | SD 卡訪問權限 | 示例代碼 | 獲取 Trace 文件 | Android Studio 查看文件)
-
【Android 性能優化】應用啟動優化 ( Trace 文件分析 | 結合代碼分析 Trace 文件 )
相關文件下載 :
- 相關 Android 源碼 : Launcher 源碼 , ActivityThread.java , Am.java , ActivityRecord.java , 等源碼下載
- Trace 分析中的文件 : Method_Trace.trace 文件下載
一、 常用的耗時方法優化方案 ( 重要 )
【Android 性能優化】應用啟動優化 ( 啟動優化項目 | 界面啟動時間 | 啟動優化項目 | 方法追蹤 MethodTracing )
【Android 性能優化】應用啟動優化 ( 方法追蹤代碼模板 | 示例項目 | SD 卡訪問權限 | 示例代碼 | 獲取 Trace 文件 | Android Studio 查看文件)
【Android 性能優化】應用啟動優化 ( Trace 文件分析 | 結合代碼分析 Trace 文件 )
在上面的三篇博客中 , 講解了如何使用 Trace 工具 , 追蹤指定方法片段的執行詳細細節 , 每個方法的執行時間 , 將耗時最長的幾個方法進行優化 , 具體的優化方案如下 :
1. 子線程中運行該耗時方法 : 開啟線程 , 將耗時方法放在線程中運行 ; 但這種方法并不是全能的 ;
某些第三方庫初始化 , 不能在子線程中調用 , 如包含 Handler 初始化 , 必須在主線程中進行初始化 ;
2. 懶加載 : 盡量使用懶加載策略 , 避免在應用啟動時大量調用方法 ;
① 定時器或線程延遲加載 : 開一個定時器或線程過一段時間 ( 3 秒后 ) 加載 ;
② 在 onResume 方法中加載 ;
③ 廣播加載 : 延遲 n 秒發送廣播 , 在廣播中加載 ;
④ 第三方框架使用時加載 : 某些第三方框架 , 如 OKHttp 等 , 封裝在一個單例類中 , 用到的時候再初始化 , 不要在啟動的時候加載全部組件 ;
在 Application 或 Activity 代碼的 onCreate 方法中 , 盡量不要有任何 訪問 文件 , 數據庫 , SharedPreference , 初始化第三方框架 等操作 , 只保留必要的賦值 , 布局加載代碼 ;
二、 源碼分析梳理
1. 應用啟動時間計算相關源碼分析
在 【Android 性能優化】應用啟動優化 ( 啟動白屏問題 | 應用啟動時間測量 | 冷啟動 | 熱啟動 | 應用啟動時間計算源碼分析 ) 博客中分析了應用啟動時間計算相關的源碼 , 主要是執行
adb shell am start -W 包名/完整 Activity 類名
命令的源碼分析 , 執行該命令后 , 會自動計算出 ① 應用加載時間 TotalTime , ② 界面顯示時間 ThisTime , ③ 用戶等待時間 WaitTime ;
在 【Android 性能優化】應用啟動優化 ( 啟動優化項目 | 界面啟動時間 | 啟動優化項目 | 方法追蹤 MethodTracing ) 博客中也有應用啟動時間相關的總結 ;
2. Launcher 應用中啟動 Android 應用流程
在下面的三篇博客中 , 詳細分析了 Launcher 應用中 , 用戶點擊應用圖標 , 啟動應用的流程 , 根據應用啟動流程分析出應用啟動優化 , 應該優化哪些地方 ;
【Android 性能優化】應用啟動優化 ( 安卓應用啟動分析 | Launcher 應用簡介 | Launcher 應用源碼簡介 | Launcher 應用快捷方式圖標點擊方法分析 ) 博客中介紹了 Launcher 應用的版本 , 源碼位置 , 等基本情況 , 其主要的 Activity 界面 Launcher.java 文件 , 找到了該文件的應用圖標點擊事件 , 該點擊事件就是觸發應用啟動的起點 ;
【Android 性能優化】應用啟動優化 ( 安卓應用啟動分析 | Launcher 應用啟用普通安卓應用 | 應用進程分析 ) 博客中講解了用戶點擊圖標之后的操作 , 通過進程間通信 , 通知 Zygote 進程為新的 Android 應用創建新進程 , 并為其分配內存 , 為之后的 ActivityThread 主線程啟動做準備 ; 并從進程角度分析了冷啟動 ( 創建新進程 ) , 熱啟動區別 ( 復用舊進程 ) ;
應用啟動截止到此處 , 全部是系統完成的工作 , 開發者無法干預該過程 ;
【Android 性能優化】應用啟動優化 ( 安卓應用啟動分析 | ActivityThread 主函數分析 | 應用初始化 | 啟動優化項目 ) 博客對應用入口類 , 即 ActivityThread 主函數類進行了分析 , 從這里開始初始化應用的 Application , Activity , 其中就發現應用啟動時 , 需要調用 Application 和 Launcher Activity 的 onCreate 方法 , 這兩個方法中絕對不能執行耗時操作 , 這也是啟動優化唯一可以優化的地方 ;
啟動優化就是在 Application 和 Launcher Activity 中不要做任何耗時操作即可 ;
三、 啟動白屏解決方案
【Android 性能優化】應用啟動優化 ( 主題背景圖片設置 | 設置透明主題背景 | 設置應用啟動主題背景、啟動后恢復主題 ) 該博客中只是提供了一個權益之計 , 建議設置透明背景 , 所有的應用都設置一下 , 防止出現白屏 , 造成的用戶體驗不好 , 但是不建議只使用這種方案 , 同時也要優化下啟動速度 ;
總結
以上是生活随笔為你收集整理的【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 性能优化】应用启动优化
- 下一篇: 【Android 性能优化】布局渲染优化