前言
- 在
Android
開(kāi)發(fā)中士修,性能優(yōu)化策略十分重要 - 因?yàn)槠錄Q定了應(yīng)用程序的開(kāi)發(fā)質(zhì)量:可用性、流暢性樱衷、穩(wěn)定性等棋嘲,是提高用戶留存率的關(guān)鍵
- 本文全面講解性能優(yōu)化中的所有知識(shí),獻(xiàn)上一份
Android
性能優(yōu)化的詳細(xì)攻略矩桂, 含:優(yōu)化方向沸移、原因 & 具體優(yōu)化方案,希望你們會(huì)喜歡
文章較長(zhǎng)侄榴,建議預(yù)留較長(zhǎng)時(shí)間閱讀 / 收藏
目錄
1. 性能優(yōu)化的目的
性能優(yōu)化的目的是為了讓?xiě)?yīng)用程序App
更快雹锣、更穩(wěn)定 & 更省。具體介紹如下:
- 更快:應(yīng)用程序 運(yùn)行得更加流暢癞蚕、不卡頓蕊爵,能快速響應(yīng)用戶操作
- 更穩(wěn)定:應(yīng)用程序 能 穩(wěn)定運(yùn)行 & 解決用戶需求,在用戶使用過(guò)程中不出現(xiàn)應(yīng)用程序崩潰
(Crash)
和 無(wú)響應(yīng)(ANR)
的問(wèn)題 - 更疏肷健:節(jié)省耗費(fèi)的資源攒射,包括 內(nèi)存占有醋旦、電池量、網(wǎng)絡(luò)資源等
2. 需優(yōu)化的性能指標(biāo)
針對(duì)上述目的会放,需優(yōu)化的性能指標(biāo) 含:流暢性浑度、穩(wěn)定性、資源節(jié)省性
3. 優(yōu)化方向
- 針對(duì)上述性能指標(biāo)鸦概,本文主要講解的優(yōu)化方向如下:
- 下面箩张,我將針對(duì)每一種性能指標(biāo),詳細(xì)講解其優(yōu)化方案
4. 流暢性
- 優(yōu)化原因
利于 減少使用中的卡頓窗市、響應(yīng)時(shí)間久等問(wèn)題先慷,給與用戶一個(gè)操作流暢的體驗(yàn) - 優(yōu)化方向
主要針對(duì)3個(gè)方面優(yōu)化:?jiǎn)?dòng)速度、頁(yè)面顯示速度咨察、響應(yīng)速度
4.1 啟動(dòng)速度
- 優(yōu)化原因(即 啟動(dòng)速度慢的原因)
初次打開(kāi)應(yīng)用時(shí)论熙,需加載很多資源 or 功能邏輯 - 優(yōu)化方案
采用 異步加載(多線程)、分步加載摄狱、延期加載的策略脓诡,減少啟動(dòng)應(yīng)用時(shí)加載的任務(wù),從而提高啟動(dòng)速度
由于我們打開(kāi)的頁(yè)面大多是
Activity
媒役,下面將給出加速啟動(dòng)Activity
的方式
4.2 頁(yè)面顯示速度
優(yōu)化原因(即 頁(yè)面顯示速度慢的原因)
a. 頁(yè)面需繪制的內(nèi)容(布局 & 控件)太多祝谚,從而導(dǎo)致頁(yè)面測(cè)量時(shí)間過(guò)長(zhǎng)
b. 繪制效率過(guò)低,從而導(dǎo)致繪制時(shí)間過(guò)長(zhǎng)優(yōu)化方案
布局優(yōu)化 & 繪制優(yōu)化酣衷。具體請(qǐng)看文章:
4.3 響應(yīng)速度
- 優(yōu)化原因
應(yīng)用程序出現(xiàn)ANR
情況穿仪,從而導(dǎo)致 應(yīng)用程序響應(yīng)速度慢
關(guān)于
ANR
的簡(jiǎn)介如下
- 優(yōu)化方案
使用多線程席爽,將大量 & 耗時(shí)操作放在工作線程中執(zhí)行
- 多線程的方式 包括:
AsyncTask
、繼承Thread
類啊片、實(shí)現(xiàn)Runnable
接口只锻、Handler
消息機(jī)制、HandlerThread
等- 注:實(shí)際開(kāi)發(fā)中紫谷,當(dāng)一個(gè)進(jìn)程發(fā)生了
ANR
后齐饮,系統(tǒng)會(huì)在/data/anr
目錄下創(chuàng)建一個(gè)文件traces.txt
,通過(guò)分析該文件可定位出ANR
的原因
4.4 其他優(yōu)化方案
-
合理的刷新機(jī)制
-
動(dòng)畫(huà)的使用
- 根據(jù)不同場(chǎng)景選擇 合適的動(dòng)畫(huà)框架
- 使用 硬件加速的方式 提高流暢度
- 使用動(dòng)畫(huà)后需停止動(dòng)畫(huà)
4.5 總結(jié)
下面碴里,總結(jié) 關(guān)于流暢性的性能優(yōu)化方案
5. 穩(wěn)定性
- 影響
Android
應(yīng)用穩(wěn)定性的原因有很多沈矿,主要是:應(yīng)用崩潰(Crash)
、應(yīng)用無(wú)響應(yīng)(ANR)
這2個(gè)錯(cuò)誤的結(jié)果將導(dǎo)致程序無(wú)法使用
- 下面咬腋,將主要講解該2個(gè)優(yōu)化方向:應(yīng)用崩潰
(Crash)
羹膳、應(yīng)用無(wú)響應(yīng)(ANR)
5.1 應(yīng)用無(wú)響應(yīng)(ANR)
- 簡(jiǎn)介
優(yōu)化原理
盡量避免應(yīng)用程序出現(xiàn)ANR
情況優(yōu)化方案
使用多線程,將大量 & 耗時(shí)操作放在工作線程中執(zhí)行
- 多線程的方式 包括:
AsyncTask
根竿、繼承Thread
類陵像、實(shí)現(xiàn)Runnable
接口就珠、Handler
消息機(jī)制、HandlerThread
等- 關(guān)于多線程的使用醒颖,可看我寫(xiě)的關(guān)于多線程的文集:多線程系列
- 注:實(shí)際開(kāi)發(fā)中妻怎,當(dāng)一個(gè)進(jìn)程發(fā)生了
ANR
后,系統(tǒng)會(huì)在/data/anr
目錄下創(chuàng)建一個(gè)文件traces.txt
泞歉,通過(guò)分析該文件可定位出ANR
的原因
5.2 應(yīng)用崩潰(Crash)
- 優(yōu)化原理
應(yīng)用崩潰Crash
很多情況是因?yàn)?內(nèi)存溢出逼侦,即OOM
;故 需避免出現(xiàn)OOM
現(xiàn)象
內(nèi)存溢出 簡(jiǎn)介:
- 優(yōu)化方案
關(guān)于內(nèi)存優(yōu)化腰耙,具體請(qǐng)看文章:Android性能優(yōu)化:這是一份全面&詳細(xì)的內(nèi)存優(yōu)化指南
5.3 總結(jié)
下面榛丢,總結(jié) 關(guān)于穩(wěn)定性的性能優(yōu)化方案
6. 資源節(jié)省性
優(yōu)化原因
由于移動(dòng)設(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)存空間占用過(guò)大 等問(wèn)題,最終導(dǎo)致應(yīng)用程序崩潰(Crash
)-
優(yōu)化方向
常見(jiàn)的內(nèi)存問(wèn)題如下- 內(nèi)存泄露
- 內(nèi)存抖動(dòng)
- 圖片
Bitmap
相關(guān) - 代碼質(zhì)量 & 數(shù)量
- 日常不正確使用
具體優(yōu)化方案
下面援制,我將詳細(xì)分析每項(xiàng)的內(nèi)存問(wèn)題 & 給出優(yōu)化方案戏挡。具體請(qǐng)看文章:
6.2 減少安裝包大小
- 優(yōu)化原因
應(yīng)用程序的安裝包大小雖對(duì)應(yīng)用程序的使用無(wú)影響,但影響的是:
- 空間占有率:即 應(yīng)用程序占有手機(jī)內(nèi)存的大小
- 下載門(mén)檻:應(yīng)用的安裝包越大隘谣,用戶下載的門(mén)檻越高
特別在移動(dòng)網(wǎng)絡(luò)下增拥,用戶下載應(yīng)用時(shí),對(duì)安裝包大小的要求更高寻歧,因此減小安裝包大小可讓更多用戶愿意下載 & 使用產(chǎn)品
- 安裝包結(jié)構(gòu) 介紹
- 優(yōu)化方案
6.3 減少網(wǎng)絡(luò)流量
優(yōu)化原因
每次獲取資源時(shí) 都通過(guò)流量 & 網(wǎng)絡(luò)加載的方式,將耗費(fèi)大量網(wǎng)絡(luò)流量優(yōu)化方案
主要通過(guò) 緩存 減少網(wǎng)絡(luò)流量秩仆,采用三級(jí)緩存方案:即 內(nèi)存緩存 - 硬盤(pán)緩存- 數(shù)據(jù)庫(kù)- 文件 - 網(wǎng)絡(luò)緩存
具體描述:當(dāng)加載資源時(shí)码泛,先從內(nèi)存緩存中尋找;若內(nèi)存緩存中沒(méi)有澄耍,則從文件緩存中尋找噪珊;若文件緩存中沒(méi)有,最終再通過(guò)流量從網(wǎng)絡(luò)中加載獲取
6.4 減少應(yīng)用的耗電量
- 優(yōu)化原因
隨著智能手機(jī)普及 & 應(yīng)用程序App
的功能發(fā)展齐莲,人們的日常生活都離不開(kāi)智能手機(jī) & 各式各樣的應(yīng)用程序App
痢站,故 應(yīng)用程序的耗電量指標(biāo)則顯得十分重要
具體優(yōu)化方案如下:
6.5 總結(jié)
下面,總結(jié) 關(guān)于資源節(jié)省性的性能優(yōu)化方案
7. 總結(jié)
- 區(qū)別于 功能性開(kāi)發(fā)需求的短期性选酗,性能優(yōu)化是貫穿整個(gè)應(yīng)用程序
App
項(xiàng)目的持續(xù)性需求阵难;雖項(xiàng)目一開(kāi)始時(shí),性能優(yōu)化的優(yōu)先級(jí)較低芒填,但當(dāng)應(yīng)用程序App
的用戶體量達(dá)到一定規(guī)模時(shí)呜叫,性能優(yōu)化 則非常重要 - 本文全面總結(jié)了
Android
開(kāi)發(fā)中的性能優(yōu)化 所有知識(shí)空繁,含:優(yōu)化方向、原因 & 具體優(yōu)化方案朱庆,下面用2張圖總結(jié):
- 下面我將繼續(xù)深入講解
Android
中的性能優(yōu)化知識(shí)盛泡,感興趣的同學(xué)可以繼續(xù)關(guān)注本人運(yùn)營(yíng)的Wechat Public Account
: - 我想給你們介紹一個(gè)與眾不同的Android微信公眾號(hào)(福利回贈(zèng))
- 我想邀請(qǐng)您和我一起寫(xiě)Android(福利回贈(zèng))
請(qǐng)點(diǎn)贊!因?yàn)槟愕墓膭?lì)是我寫(xiě)作的最大動(dòng)力娱颊!
相關(guān)文章閱讀
Android開(kāi)發(fā):最全面傲诵、最易懂的Android屏幕適配解決方案
Android事件分發(fā)機(jī)制詳解:史上最全面、最易懂
Android開(kāi)發(fā):史上最全的Android消息推送解決方案
Android開(kāi)發(fā):最全面、最易懂的Webview詳解
Android開(kāi)發(fā):JSON簡(jiǎn)介及最全面解析方法!
Android四大組件:Service服務(wù)史上最全面解析
Android四大組件:BroadcastReceiver史上最全面解析
歡迎關(guān)注Carson_Ho的簡(jiǎn)書(shū)晾嘶!
不定期分享關(guān)于安卓開(kāi)發(fā)的干貨洲愤,追求短、平殖熟、快,但卻不缺深度斑响。