[Android開發藝術探索閱讀筆記]第15章 效能優化

wenchieh發表於2017-12-13

2015年Google在YouTube上釋出了關於Android效能優化典範的專題,通過一系列短視訊來幫助開發者建立更快更優秀的Android應用,課程專題不僅僅介紹了Android系統中有關效能問題的底層工作原理,同時也介紹瞭如何通過工具來找出效能問題以及提升效能的建議,地址是:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

效能優化方法

主要有:

  1. 佈局優化
  2. 繪製優化
  3. 記憶體洩漏優化
  4. 響應速度優化
  5. ListView 優化
  6. Bitmap 優化
  7. 執行緒優化
  8. 一些效能優化建議

佈局優化

思想是減少佈局的層級。

有選擇的使用一些效能不高的佈局:如 RelativeLayout,它的佈局需要花費更多的時間。

使用 <inclue><merge>、和 ViewStub

繪製優化

避免在 onDraw() 中執行大量的操作。

避免在 onDraw() 中建立新的區域性物件,因為 onDraw() 會被多次呼叫,會導致頻繁 GC。

不能做耗時操作。

記憶體洩漏優化

避免寫出有記憶體洩漏的程式碼,利用 MAT 等工具查詢。

  1. 靜態變數
  2. 單例
  3. 屬性動畫

響應速度優化和 ANR 日誌分析

避免將耗時操作放在主執行緒中執行。
Activiy 5s 無法響應螢幕觸控事件就會發生 ANR,BroadcastReceiver 是 10s。

一個程式發生 ANR 後,系統會在 /data/anr 建立一個檔案 traces.txt

ListView 和 Bitmap 優化

ListView

  1. 複用 ViewHolder
  2. 當列表在滑動時不適合做大量非同步認為
  3. 可以開啟硬體加速

Bitmap

通過 BitmapFactory.Options 根據需要對圖片進行取樣,利用 inSampleSize 進行裁剪減小 Bitmap 的大小。

執行緒優化

取樣執行緒池,複用執行緒。控制執行緒的最大併發數。

一些建議

  1. 避免建立過多的物件;
  2. 不要過多使用列舉,列舉佔用的記憶體空間要比整型大;
  3. 常量請使用static final來修飾;
  4. 使用一些Android特有的資料結構,比如SparseArray和Pair等,它們都具有更好的效能;
  5. 適當使用軟引用和軟引用;
  6. 採用記憶體快取和磁碟快取;
  7. 儘量採用靜態內部類,這樣可以避免潛在的由於內部類而導致的記憶體洩露。

MAT 分析工具

全稱 Eclipse Memory Analyzer。

下載地址:http://www.eclipse.org/mat/downloads.php

提高程式的可維護性

  1. 命名規範
  2. 程式碼留出適當的空白區分不同的程式碼塊
  3. 只給關鍵的地方寫註釋

一段繁瑣的業務邏輯,應該適當拆分為幾個小的函式或者類。

相關文章