前言
- 在
Android
開發中,效能優化策略十分重要 - 因為其決定了應用程式的開發質量:可用性、流暢性、穩定性等,是提高使用者留存率的關鍵
- 本文全面講解效能優化中的所有知識,獻上一份
Android
效能優化的詳細攻略, 含:優化方向、原因 & 具體優化方案,希望你們會喜歡
文章較長,建議預留較長時間閱讀 / 收藏
目錄
1. 效能優化的目的
效能優化的目的是為了讓應用程式App
更快、更穩定 & 更省。具體介紹如下:
- 更快:應用程式 執行得更加流暢、不卡頓,能快速響應使用者操作
- 更穩定:應用程式 能 穩定執行 & 解決使用者需求,在使用者使用過程中不出現應用程式崩潰
(Crash)
和 無響應(ANR)
的問題 - 更省:節省耗費的資源,包括 記憶體佔有、電池量、網路資源等
2. 需優化的效能指標
針對上述目的,需優化的效能指標 含:流暢性、穩定性、資源節省性
3. 優化方向
- 針對上述效能指標,本文主要講解的優化方向如下:
- 下面,我將針對每一種效能指標,詳細講解其優化方案
4. 流暢性
- 優化原因 利於 減少使用中的卡頓、響應時間久等問題,給與使用者一個操作流暢的體驗
- 優化方向 主要針對3個方面優化:啟動速度、頁面顯示速度、響應速度
4.1 啟動速度
- 優化原因(即 啟動速度慢的原因) 初次開啟應用時,需載入很多資源 or 功能邏輯
- 優化方案 採用 非同步載入(多執行緒)、分步載入、延期載入的策略,減少啟動應用時載入的任務,從而提高啟動速度
由於我們開啟的頁面大多是
Activity
,下面將給出加速啟動Activity
的方式
4.2 頁面顯示速度
-
優化原因(即 頁面顯示速度慢的原因) a. 頁面需繪製的內容(佈局 & 控制元件)太多,從而導致頁面測量時間過長 b. 繪製效率過低,從而導致繪製時間過長
-
優化方案 佈局優化 & 繪製優化。具體請看文章:
4.3 響應速度
- 優化原因
應用程式出現
ANR
情況,從而導致 應用程式響應速度慢
關於
ANR
的簡介如下
- 優化方案 使用多執行緒,將大量 & 耗時操作放在工作執行緒中執行
- 多執行緒的方式 包括:
AsyncTask
、繼承Thread
類、實現Runnable
介面、Handler
訊息機制、HandlerThread
等- 注:實際開發中,當一個程式發生了
ANR
後,系統會在/data/anr
目錄下建立一個檔案traces.txt
,通過分析該檔案可定位出ANR
的原因
4.4 其他優化方案
-
合理的重新整理機制
-
動畫的使用
- 根據不同場景選擇 合適的動畫框架
- 使用 硬體加速的方式 提高流暢度
- 使用動畫後需停止動畫
4.5 總結
下面,總結 關於流暢性的效能優化方案
5. 穩定性
- 影響
Android
應用穩定性的原因有很多,主要是:應用崩潰(Crash)
、應用無響應(ANR)
這2個錯誤的結果將導致程式無法使用
- 下面,將主要講解該2個優化方向:應用崩潰
(Crash)
、應用無響應(ANR)
5.1 應用無響應(ANR)
- 簡介
-
優化原理 儘量避免應用程式出現
ANR
情況 -
優化方案 使用多執行緒,將大量 & 耗時操作放在工作執行緒中執行
- 多執行緒的方式 包括:
AsyncTask
、繼承Thread
類、實現Runnable
介面、Handler
訊息機制、HandlerThread
等- 關於多執行緒的使用,可看我寫的關於多執行緒的文集:多執行緒系列
- 注:實際開發中,當一個程式發生了
ANR
後,系統會在/data/anr
目錄下建立一個檔案traces.txt
,通過分析該檔案可定位出ANR
的原因
5.2 應用崩潰(Crash)
- 優化原理
應用崩潰
Crash
很多情況是因為 記憶體溢位,即OOM
;故 需避免出現OOM
現象
記憶體溢位 簡介:
- 優化方案 關於記憶體優化,具體請看文章:Android效能優化:這是一份全面&詳細的記憶體優化指南
5.3 總結
下面,總結 關於穩定性的效能優化方案
6. 資源節省性
-
優化原因 由於移動裝置的硬體效能有限,故減少應用程式的資源消耗顯得十分重要
-
優化方向 記憶體大小、安裝包大小、耗電量 & 網路流量
6.1 記憶體優化
-
優化原因 避免因不正確使用記憶體 & 缺乏管理,從而出現 記憶體洩露
(ML)
、記憶體溢位(OOM)
、記憶體空間佔用過大 等問題,最終導致應用程式崩潰(Crash
) -
優化方向 常見的記憶體問題如下
- 記憶體洩露
- 記憶體抖動
- 圖片
Bitmap
相關 - 程式碼質量 & 數量
- 日常不正確使用
-
具體優化方案 下面,我將詳細分析每項的記憶體問題 & 給出優化方案。具體請看文章:
6.2 減少安裝包大小
- 優化原因 應用程式的安裝包大小雖對應用程式的使用無影響,但影響的是:
- 空間佔有率:即 應用程式佔有手機記憶體的大小
- 下載門檻:應用的安裝包越大,使用者下載的門檻越高
特別在行動網路下,使用者下載應用時,對安裝包大小的要求更高,因此減小安裝包大小可讓更多使用者願意下載 & 使用產品
- 安裝包結構 介紹
- 優化方案
6.3 減少網路流量
-
優化原因 每次獲取資源時 都通過流量 & 網路載入的方式,將耗費大量網路流量
-
優化方案 主要通過 快取 減少網路流量,採用三級快取方案:即 記憶體快取 - 硬碟快取- 資料庫- 檔案 - 網路快取
具體描述:當載入資源時,先從記憶體快取中尋找;若記憶體快取中沒有,則從檔案快取中尋找;若檔案快取中沒有,最終再通過流量從網路中載入獲取
- 具體應用 具體請看文章: Android:手把手教你構建 WebView 的快取機制 & 資源預載入方案
6.4 減少應用的耗電量
- 優化原因
隨著智慧手機普及 & 應用程式
App
的功能發展,人們的日常生活都離不開智慧手機 & 各式各樣的應用程式App
,故 應用程式的耗電量指標則顯得十分重要
具體優化方案如下:
6.5 總結
下面,總結 關於資源節省性的效能優化方案
7. 總結
- 區別於 功能性開發需求的短期性,效能優化是貫穿整個應用程式
App
專案的持續性需求;雖專案一開始時,效能優化的優先順序較低,但當應用程式App
的使用者體量達到一定規模時,效能優化 則非常重要 - 本文全面總結了
Android
開發中的效能優化 所有知識,含:優化方向、原因 & 具體優化方案,下面用2張圖總結:
- 下面我將繼續深入講解
Android
中的效能優化知識,有興趣可以繼續關注Carson_Ho的安卓開發筆記
效能優化相關文章閱讀
Android效能優化:手把手帶你全面瞭解 記憶體洩露 & 解決方案
Android效能優化:那些關於Bitmap圖片資源優化的小事
Android效能優化:佈局優化 詳細解析(含include、ViewStub、merge講解 )