Android性能優化:手把手教你如何讓App更快、更穩、更省(含內存、佈局優化等)

前言

  • Android開發中,性能優化策略十分重要
  • 由於其決定了應用程序的開發質量:可用性、流暢性、穩定性等,是提升用戶留存率的關鍵
  • 本文全面講解性能優化中的全部知識,獻上一份 Android性能優化的詳細攻略, 含:優化方向、緣由 & 具體優化方案,但願大家會喜歡

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


目錄

 

示意圖

 


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 內存優化

  • 優化緣由 避免因不正確使用內存 & 缺少管理,從而出現 內存泄露(ML)、內存溢出(OOM)、內存空間佔用過大 等問題,最終致使應用程序崩潰(Crash

  • 優化方向 常見的內存問題以下

    1. 內存泄露
    2. 內存抖動
    3. 圖片Bitmap相關
    4. 代碼質量 & 數量
    5. 平常不正確使用

6.2 減小安裝包大小

  • 優化緣由 應用程序的安裝包大小雖對應用程序的使用無影響,但影響的是:
  1. 空間佔有率:即 應用程序佔有手機內存的大小
  2. 下載門檻:應用的安裝包越大,用戶下載的門檻越高

特別在移動網絡下,用戶下載應用時,對安裝包大小的要求更高,所以減少安裝包大小可以讓更多用戶願意下載 & 使用產品

  • 安裝包結構 介紹

 

示意圖

 

  • 優化方案

 

示意圖

 

6.3 減小網絡流量

  • 優化緣由 每次獲取資源時 都經過流量 & 網絡加載的方式,將耗費大量網絡流量

  • 優化方案 主要經過 緩存 減小網絡流量,採用三級緩存方案:即 內存緩存 - 硬盤緩存- 數據庫- 文件 - 網絡緩存

具體描述:當加載資源時,先從內存緩存中尋找;若內存緩存中沒有,則從文件緩存中尋找;若文件緩存中沒有,最終再經過流量從網絡中加載獲取

6.4 減小應用的耗電量

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

具體優化方案以下:

示意圖

 

6.5 總結

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

示意圖

 


7. 總結

  • 區別於 功能性開發需求的短時間性,性能優化是貫穿整個應用程序App項目的持續性需求;雖項目一開始時,性能優化的優先級較低,但當應用程序App的用戶體量達到必定規模時,性能優化 則很是重要
  • 本文全面總結了Android開發中的性能優化 全部知識,含:優化方向、緣由 & 具體優化方案,下面用2張圖總結:

 

性能優化概述

 

 

示意圖

最後給你們分享一份很是系統和全面的Android進階技術大綱及進階資料,及面試題集

想學習更多Android知識,請加入Android技術開發交流 7520 16839

進羣與大牛們一塊兒討論,還可獲取Android高級架構資料、源碼、筆記、視頻

包括 高級UI、Gradle、RxJava、小程序、Hybrid、移動架構、React Native、性能優化等全面的Android高級實踐技術講解性能優化架構思惟導圖,和BATJ面試題及答案!

羣裏免費分享給有須要的朋友,但願可以幫助一些在這個行業發展迷茫的,或者想系統深刻提高以及困於瓶頸的朋友,在網上博客論壇等地方少花些時間找資料,把有限的時間,真正花在學習上,因此我在這免費分享一些架構資料及給你們。但願在這些資料中都有你須要的內容。

Android高級技術大綱,以及系統進階視頻,及面試題和答案

 

面試題及答案

 

Android高級技術大綱

 

Android 進階視頻資料

相關文章
相關標籤/搜索