Android效能優化:手把手教你如何讓App更快、更穩、更省(含記憶體、佈局優化等)

Carson_Ho發表於2019-02-25

前言

  • Android開發中,效能優化策略十分重要
  • 因為其決定了應用程式的開發質量:可用性、流暢性、穩定性等,是提高使用者留存率的關鍵
  • 本文全面講解效能優化中的所有知識,獻上一份 Android效能優化的詳細攻略, 含:優化方向、原因 & 具體優化方案,希望你們會喜歡

文章較長,建議預留較長時間閱讀 / 收藏


目錄

示意圖


1. 效能優化的目的

效能優化的目的是為了讓應用程式App 更快、更穩定 & 更省。具體介紹如下:

  • 更快:應用程式 執行得更加流暢、不卡頓,能快速響應使用者操作
  • 更穩定:應用程式 能 穩定執行 & 解決使用者需求,在使用者使用過程中不出現應用程式崩潰(Crash) 和 無響應(ANR)的問題
  • 更省:節省耗費的資源,包括 記憶體佔有、電池量、網路資源等

2. 需優化的效能指標

針對上述目的,需優化的效能指標 含:流暢性、穩定性、資源節省性


3. 優化方向

  • 針對上述效能指標,本文主要講解的優化方向如下:

示意圖

  • 下面,我將針對每一種效能指標,詳細講解其優化方案

4. 流暢性

  • 優化原因 利於 減少使用中的卡頓、響應時間久等問題,給與使用者一個操作流暢的體驗
  • 優化方向 主要針對3個方面優化:啟動速度、頁面顯示速度、響應速度

4.1 啟動速度

  • 優化原因(即 啟動速度慢的原因) 初次開啟應用時,需載入很多資源 or 功能邏輯
  • 優化方案 採用 非同步載入(多執行緒)、分步載入、延期載入的策略,減少啟動應用時載入的任務,從而提高啟動速度

由於我們開啟的頁面大多是Activity,下面將給出加速啟動Activity的方式

示意圖

4.2 頁面顯示速度

  • 優化原因(即 頁面顯示速度慢的原因) a. 頁面需繪製的內容(佈局 & 控制元件)太多,從而導致頁面測量時間過長 b. 繪製效率過低,從而導致繪製時間過長

  • 優化方案 佈局優化 & 繪製優化。具體請看文章:

  1. Android效能優化:手把手帶你全面瞭解 繪製優化
  2. Android效能優化:佈局優化 詳細解析(含、、講解 )

4.3 響應速度

  • 優化原因 應用程式出現 ANR 情況,從而導致 應用程式響應速度慢

關於ANR的簡介如下

示意圖

  • 優化方案 使用多執行緒,將大量 & 耗時操作放在工作執行緒中執行
  1. 多執行緒的方式 包括:AsyncTask、繼承 Thread類、實現 Runnable介面、Handler訊息機制、HandlerThread
  2. 注:實際開發中,當一個程式發生了ANR後,系統會在 /data/anr目錄下建立一個檔案 traces.txt,通過分析該檔案可定位出ANR的原因

4.4 其他優化方案

  • 合理的重新整理機制

    示意圖

  • 動畫的使用

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

4.5 總結

下面,總結 關於流暢性的效能優化方案

示意圖


5. 穩定性

  • 影響Android 應用穩定性的原因有很多,主要是:應用崩潰(Crash)、應用無響應(ANR)

這2個錯誤的結果將導致程式無法使用

  • 下面,將主要講解該2個優化方向:應用崩潰(Crash)、應用無響應(ANR)

5.1 應用無響應(ANR)

  • 簡介

示意圖

  • 優化原理 儘量避免應用程式出現 ANR 情況

  • 優化方案 使用多執行緒,將大量 & 耗時操作放在工作執行緒中執行

  1. 多執行緒的方式 包括:AsyncTask、繼承 Thread類、實現 Runnable介面、Handler訊息機制、HandlerThread
  2. 關於多執行緒的使用,可看我寫的關於多執行緒的文集:多執行緒系列
  3. 注:實際開發中,當一個程式發生了ANR後,系統會在 /data/anr目錄下建立一個檔案 traces.txt,通過分析該檔案可定位出ANR的原因

5.2 應用崩潰(Crash)

  • 優化原理 應用崩潰Crash很多情況是因為 記憶體溢位,即OOM;故 需避免出現 OOM現象

記憶體溢位 簡介:

示意圖

5.3 總結

下面,總結 關於穩定性的效能優化方案

示意圖


6. 資源節省性

  • 優化原因 由於移動裝置的硬體效能有限,故減少應用程式的資源消耗顯得十分重要

  • 優化方向 記憶體大小、安裝包大小、耗電量 & 網路流量

6.1 記憶體優化

6.2 減少安裝包大小

  • 優化原因 應用程式的安裝包大小雖對應用程式的使用無影響,但影響的是:
  1. 空間佔有率:即 應用程式佔有手機記憶體的大小
  2. 下載門檻:應用的安裝包越大,使用者下載的門檻越高

特別在行動網路下,使用者下載應用時,對安裝包大小的要求更高,因此減小安裝包大小可讓更多使用者願意下載 & 使用產品

  • 安裝包結構 介紹

示意圖

  • 優化方案

示意圖

6.3 減少網路流量

  • 優化原因 每次獲取資源時 都通過流量 & 網路載入的方式,將耗費大量網路流量

  • 優化方案 主要通過 快取 減少網路流量,採用三級快取方案:即 記憶體快取 - 硬碟快取- 資料庫- 檔案 - 網路快取

具體描述:當載入資源時,先從記憶體快取中尋找;若記憶體快取中沒有,則從檔案快取中尋找;若檔案快取中沒有,最終再通過流量從網路中載入獲取

6.4 減少應用的耗電量

  • 優化原因 隨著智慧手機普及 & 應用程式App的功能發展,人們的日常生活都離不開智慧手機 & 各式各樣的應用程式App,故 應用程式的耗電量指標則顯得十分重要

具體優化方案如下:

示意圖

6.5 總結

下面,總結 關於資源節省性的效能優化方案

示意圖


7. 總結

  • 區別於 功能性開發需求的短期性,效能優化是貫穿整個應用程式App專案的持續性需求;雖專案一開始時,效能優化的優先順序較低,但當應用程式App的使用者體量達到一定規模時,效能優化 則非常重要
  • 本文全面總結了Android開發中的效能優化 所有知識,含:優化方向、原因 & 具體優化方案,下面用2張圖總結:

效能優化概述

示意圖

效能優化相關文章閱讀

Android效能優化:這是一份全面&詳細的記憶體優化指南

Android效能優化:手把手帶你全面瞭解 記憶體洩露 & 解決方案

Android效能優化:那些關於Bitmap圖片資源優化的小事

Android效能優化:手把手帶你全面瞭解 繪製優化

Android效能優化:佈局優化 詳細解析(含include、ViewStub、merge講解 )


請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!


歡迎關注carson_ho的微信公眾號

示意圖

示意圖

相關文章