前言
- 在
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
相關 - 代碼質量 & 數量
- 日常不正確使用
-
具體優化方案
下面,我將詳細分析每項的內存問題 & 給出優化方案。具體請看文章: - Android性能優化:手把手帶你全面瞭解 內存泄露 & 解決方案
6.2 減少安裝包大小
-
優化原因
應用程序的安裝包大小雖對應用程序的使用無影響,但影響的是:- 空間佔有率:即 應用程序佔有手機內存的大小
- 下載門檻:應用的安裝包越大,用戶下載的門檻越高
特別在移動網絡下,用戶下載應用時,對安裝包大小的要求更高,因此減小安裝包大小可讓更多用戶願意下載 & 使用產品
-
安裝包結構 介紹
- 優化方案
6.3 減少網絡流量
-
優化原因
每次獲取資源時 都通過流量 & 網絡加載的方式,將耗費大量網絡流量 -
優化方案
主要通過 緩存 減少網絡流量,採用三級緩存方案:即 內存緩存 - 硬盤緩存- 數據庫- 文件 - 網絡緩存具體描述:當加載資源時,先從內存緩存中尋找;若內存緩存中沒有,則從文件緩存中尋找;若文件緩存中沒有,最終再通過流量從網絡中加載獲取
-
具體應用
具體請看文章:
Android:手把手教你構建 WebView 的緩存機制 & 資源預加載方案
6.4 減少應用的耗電量
- 優化原因
隨着智能手機普及 & 應用程序App
的功能發展,人們的日常生活都離不開智能手機 & 各式各樣的應用程序App
,故 應用程序的耗電量指標則顯得十分重要
具體優化方案如下:
6.5 總結
下面,總結 關於資源節省性的性能優化方案
7. 總結
- 區別於 功能性開發需求的短期性,性能優化是貫穿整個應用程序
App
項目的持續性需求;雖項目一開始時,性能優化的優先級較低,但當應用程序App
的用戶體量達到一定規模時,性能優化 則非常重要 - 本文全面總結了
Android
開發中的性能優化 所有知識,含:優化方向、原因 & 具體優化方案,下面用2張圖總結: