Android性能優(yōu)化:手把手教你如何讓App更快、更穩(wěn)、更省(含內(nèi)存、布局優(yōu)化等)

前言

  • 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)化。具體請看文章:

  1. Android性能優(yōu)化:手把手帶你全面了解 繪制優(yōu)化
  2. Android性能優(yōu)化:布局優(yōu)化 詳細解析(含<include>、<ViewStub>、<merge>講解 )

4.3 響應(yīng)速度

  • 優(yōu)化原因
    應(yīng)用程序出現(xiàn) ANR 情況,從而導(dǎo)致 應(yīng)用程序響應(yīng)速度慢

關(guān)于ANR的簡介如下

示意圖
  • 優(yōu)化方案
    使用多線程,將大量 & 耗時操作放在工作線程中執(zhí)行
  1. 多線程的方式 包括:AsyncTask、繼承 Thread類、實現(xiàn) Runnable接口、Handler消息機制、HandlerThread
  2. 注:實際開發(fā)中,當(dāng)一個進程發(fā)生了ANR后,系統(tǒng)會在 /data/anr目錄下創(chuàng)建一個文件 traces.txt,通過分析該文件可定位出ANR的原因

4.4 其他優(yōu)化方案

  • 合理的刷新機制


    示意圖
  • 動畫的使用

    1. 根據(jù)不同場景選擇 合適的動畫框架
    2. 使用 硬件加速的方式 提高流暢度
    3. 使用動畫后需停止動畫

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í)行

  1. 多線程的方式 包括:AsyncTask、繼承 Thread類、實現(xiàn) Runnable接口、Handler消息機制、HandlerThread
  2. 關(guān)于多線程的使用,可看我寫的關(guān)于多線程的文集:多線程系列
  3. 注:實際開發(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)存溢出 簡介:


示意圖

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)存問題如下

    1. 內(nèi)存泄露
    2. 內(nèi)存抖動
    3. 圖片Bitmap相關(guān)
    4. 代碼質(zhì)量 & 數(shù)量
    5. 日常不正確使用
  • 具體優(yōu)化方案
    下面,我將詳細分析每項的內(nèi)存問題 & 給出優(yōu)化方案。具體請看文章:

  1. Android性能優(yōu)化:這是一份全面&詳細的內(nèi)存優(yōu)化指南
  2. Android性能優(yōu)化:手把手帶你全面了解 內(nèi)存泄露 & 解決方案

6.2 減少安裝包大小

  • 優(yōu)化原因
    應(yīng)用程序的安裝包大小雖對應(yīng)用程序的使用無影響,但影響的是:
  1. 空間占有率:即 應(yīng)用程序占有手機內(nèi)存的大小
  2. 下載門檻:應(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é):
性能優(yōu)化概述
示意圖

請點贊!因為你的鼓勵是我寫作的最大動力!

相關(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ā)的干貨,追求短、平、快,但卻不缺深度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內(nèi)容