前言
- 在
Android
開發(fā)中,性能優(yōu)化策略十分重要 - 因為其決定了應(yīng)用程序的開發(fā)質(zhì)量:可用性、流暢性、穩(wěn)定性等,是提高用戶留存率的關(guān)鍵
- 本文全面講解性能優(yōu)化中的所有知識,獻上一份
Android
性能優(yōu)化的詳細攻略, 含:優(yōu)化方向、原因 & 具體優(yōu)化方案,希望你們會喜歡
文章較長,建議預(yù)留較長時間閱讀 / 收藏
目錄
1. 性能優(yōu)化的目的
性能優(yōu)化的目的是為了讓應(yīng)用程序App
更快、更穩(wěn)定 & 更省。具體介紹如下:
- 更快:應(yīng)用程序 運行得更加流暢、不卡頓,能快速響應(yīng)用戶操作
- 更穩(wěn)定:應(yīng)用程序 能 穩(wěn)定運行 & 解決用戶需求,在用戶使用過程中不出現(xiàn)應(yīng)用程序崩潰
(Crash)
和 無響應(yīng)(ANR)
的問題 - 更省:節(jié)省耗費的資源,包括 內(nèi)存占有、電池量、網(wǎng)絡(luò)資源等
2. 需優(yōu)化的性能指標(biāo)
針對上述目的,需優(yōu)化的性能指標(biāo) 含:流暢性、穩(wěn)定性、資源節(jié)省性
3. 優(yōu)化方向
- 針對上述性能指標(biāo),本文主要講解的優(yōu)化方向如下:
- 下面,我將針對每一種性能指標(biāo),詳細講解其優(yōu)化方案
4. 流暢性
- 優(yōu)化原因
利于 減少使用中的卡頓、響應(yīng)時間久等問題,給與用戶一個操作流暢的體驗 - 優(yōu)化方向
主要針對3個方面優(yōu)化:啟動速度、頁面顯示速度、響應(yīng)速度
4.1 啟動速度
- 優(yōu)化原因(即 啟動速度慢的原因)
初次打開應(yīng)用時,需加載很多資源 or 功能邏輯 - 優(yōu)化方案
采用 異步加載(多線程)、分步加載、延期加載的策略,減少啟動應(yīng)用時加載的任務(wù),從而提高啟動速度
由于我們打開的頁面大多是
Activity
,下面將給出加速啟動Activity
的方式
4.2 頁面顯示速度
優(yōu)化原因(即 頁面顯示速度慢的原因)
a. 頁面需繪制的內(nèi)容(布局 & 控件)太多,從而導(dǎo)致頁面測量時間過長
b. 繪制效率過低,從而導(dǎo)致繪制時間過長優(yōu)化方案
布局優(yōu)化 & 繪制優(yōu)化。具體請看文章:
4.3 響應(yīng)速度
- 優(yōu)化原因
應(yīng)用程序出現(xiàn)ANR
情況,從而導(dǎo)致 應(yīng)用程序響應(yīng)速度慢
關(guān)于
ANR
的簡介如下
- 優(yōu)化方案
使用多線程,將大量 & 耗時操作放在工作線程中執(zhí)行
- 多線程的方式 包括:
AsyncTask
、繼承Thread
類、實現(xiàn)Runnable
接口、Handler
消息機制、HandlerThread
等- 注:實際開發(fā)中,當(dāng)一個進程發(fā)生了
ANR
后,系統(tǒng)會在/data/anr
目錄下創(chuàng)建一個文件traces.txt
,通過分析該文件可定位出ANR
的原因
4.4 其他優(yōu)化方案
-
合理的刷新機制
示意圖 -
動畫的使用
- 根據(jù)不同場景選擇 合適的動畫框架
- 使用 硬件加速的方式 提高流暢度
- 使用動畫后需停止動畫
4.5 總結(jié)
下面,總結(jié) 關(guān)于流暢性的性能優(yōu)化方案
5. 穩(wěn)定性
- 影響
Android
應(yīng)用穩(wěn)定性的原因有很多,主要是:應(yīng)用崩潰(Crash)
、應(yīng)用無響應(yīng)(ANR)
這2個錯誤的結(jié)果將導(dǎo)致程序無法使用
- 下面,將主要講解該2個優(yōu)化方向:應(yīng)用崩潰
(Crash)
、應(yīng)用無響應(yīng)(ANR)
5.1 應(yīng)用無響應(yīng)(ANR)
- 簡介
優(yōu)化原理
盡量避免應(yīng)用程序出現(xiàn)ANR
情況優(yōu)化方案
使用多線程,將大量 & 耗時操作放在工作線程中執(zhí)行
- 多線程的方式 包括:
AsyncTask
、繼承Thread
類、實現(xiàn)Runnable
接口、Handler
消息機制、HandlerThread
等- 關(guān)于多線程的使用,可看我寫的關(guān)于多線程的文集:多線程系列
- 注:實際開發(fā)中,當(dāng)一個進程發(fā)生了
ANR
后,系統(tǒng)會在/data/anr
目錄下創(chuàng)建一個文件traces.txt
,通過分析該文件可定位出ANR
的原因
5.2 應(yīng)用崩潰(Crash)
- 優(yōu)化原理
應(yīng)用崩潰Crash
很多情況是因為 內(nèi)存溢出,即OOM
;故 需避免出現(xiàn)OOM
現(xiàn)象
內(nèi)存溢出 簡介:
示意圖
- 優(yōu)化方案
關(guān)于內(nèi)存優(yōu)化,具體請看文章:Android性能優(yōu)化:這是一份全面&詳細的內(nèi)存優(yōu)化指南
5.3 總結(jié)
下面,總結(jié) 關(guān)于穩(wěn)定性的性能優(yōu)化方案
6. 資源節(jié)省性
優(yōu)化原因
由于移動設(shè)備的硬件性能有限,故減少應(yīng)用程序的資源消耗顯得十分重要優(yōu)化方向
內(nèi)存大小、安裝包大小、耗電量 & 網(wǎng)絡(luò)流量
6.1 內(nèi)存優(yōu)化
優(yōu)化原因
避免因不正確使用內(nèi)存 & 缺乏管理,從而出現(xiàn) 內(nèi)存泄露(ML)
、內(nèi)存溢出(OOM)
、內(nèi)存空間占用過大 等問題,最終導(dǎo)致應(yīng)用程序崩潰(Crash
)-
優(yōu)化方向
常見的內(nèi)存問題如下- 內(nèi)存泄露
- 內(nèi)存抖動
- 圖片
Bitmap
相關(guān) - 代碼質(zhì)量 & 數(shù)量
- 日常不正確使用
具體優(yōu)化方案
下面,我將詳細分析每項的內(nèi)存問題 & 給出優(yōu)化方案。具體請看文章:
6.2 減少安裝包大小
- 優(yōu)化原因
應(yīng)用程序的安裝包大小雖對應(yīng)用程序的使用無影響,但影響的是:
- 空間占有率:即 應(yīng)用程序占有手機內(nèi)存的大小
- 下載門檻:應(yīng)用的安裝包越大,用戶下載的門檻越高
特別在移動網(wǎng)絡(luò)下,用戶下載應(yīng)用時,對安裝包大小的要求更高,因此減小安裝包大小可讓更多用戶愿意下載 & 使用產(chǎn)品
- 安裝包結(jié)構(gòu) 介紹
- 優(yōu)化方案
6.3 減少網(wǎng)絡(luò)流量
優(yōu)化原因
每次獲取資源時 都通過流量 & 網(wǎng)絡(luò)加載的方式,將耗費大量網(wǎng)絡(luò)流量優(yōu)化方案
主要通過 緩存 減少網(wǎng)絡(luò)流量,采用三級緩存方案:即 內(nèi)存緩存 - 硬盤緩存- 數(shù)據(jù)庫- 文件 - 網(wǎng)絡(luò)緩存
具體描述:當(dāng)加載資源時,先從內(nèi)存緩存中尋找;若內(nèi)存緩存中沒有,則從文件緩存中尋找;若文件緩存中沒有,最終再通過流量從網(wǎng)絡(luò)中加載獲取
6.4 減少應(yīng)用的耗電量
- 優(yōu)化原因
隨著智能手機普及 & 應(yīng)用程序App
的功能發(fā)展,人們的日常生活都離不開智能手機 & 各式各樣的應(yīng)用程序App
,故 應(yīng)用程序的耗電量指標(biāo)則顯得十分重要
具體優(yōu)化方案如下:
6.5 總結(jié)
下面,總結(jié) 關(guān)于資源節(jié)省性的性能優(yōu)化方案
7. 總結(jié)
- 區(qū)別于 功能性開發(fā)需求的短期性,性能優(yōu)化是貫穿整個應(yīng)用程序
App
項目的持續(xù)性需求;雖項目一開始時,性能優(yōu)化的優(yōu)先級較低,但當(dāng)應(yīng)用程序App
的用戶體量達到一定規(guī)模時,性能優(yōu)化 則非常重要 - 本文全面總結(jié)了
Android
開發(fā)中的性能優(yōu)化 所有知識,含:優(yōu)化方向、原因 & 具體優(yōu)化方案,下面用2張圖總結(jié):
- 下面我將繼續(xù)深入講解
Android
中的性能優(yōu)化知識,感興趣的同學(xué)可以繼續(xù)關(guān)注本人運營的Wechat Public Account
: - 我想給你們介紹一個與眾不同的Android微信公眾號(福利回贈)
- 我想邀請您和我一起寫Android(福利回贈)
請點贊!因為你的鼓勵是我寫作的最大動力!
相關(guān)文章閱讀
Android開發(fā):最全面、最易懂的Android屏幕適配解決方案
Android事件分發(fā)機制詳解:史上最全面、最易懂
Android開發(fā):史上最全的Android消息推送解決方案
Android開發(fā):最全面、最易懂的Webview詳解
Android開發(fā):JSON簡介及最全面解析方法!
Android四大組件:Service服務(wù)史上最全面解析
Android四大組件:BroadcastReceiver史上最全面解析
歡迎關(guān)注Carson_Ho的簡書!
不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。