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