2015年Google在YouTube上釋出了關於Android效能優化典範的專題,通過一系列短視訊來幫助開發者建立更快更優秀的Android應用,課程專題不僅僅介紹了Android系統中有關效能問題的底層工作原理,同時也介紹瞭如何通過工具來找出效能問題以及提升效能的建議,地址是:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
效能優化方法
主要有:
- 佈局優化
- 繪製優化
- 記憶體洩漏優化
- 響應速度優化
- ListView 優化
- Bitmap 優化
- 執行緒優化
- 一些效能優化建議
佈局優化
思想是減少佈局的層級。
有選擇的使用一些效能不高的佈局:如 RelativeLayout,它的佈局需要花費更多的時間。
使用 <inclue>
、<merge>
、和 ViewStub
繪製優化
避免在 onDraw()
中執行大量的操作。
避免在 onDraw()
中建立新的區域性物件,因為 onDraw()
會被多次呼叫,會導致頻繁 GC。
不能做耗時操作。
記憶體洩漏優化
避免寫出有記憶體洩漏的程式碼,利用 MAT 等工具查詢。
- 靜態變數
- 單例
- 屬性動畫
響應速度優化和 ANR 日誌分析
避免將耗時操作放在主執行緒中執行。
Activiy 5s 無法響應螢幕觸控事件就會發生 ANR,BroadcastReceiver 是 10s。
一個程式發生 ANR 後,系統會在 /data/anr 建立一個檔案 traces.txt
ListView 和 Bitmap 優化
ListView
- 複用 ViewHolder
- 當列表在滑動時不適合做大量非同步認為
- 可以開啟硬體加速
Bitmap
通過 BitmapFactory.Options
根據需要對圖片進行取樣,利用 inSampleSize
進行裁剪減小 Bitmap 的大小。
執行緒優化
取樣執行緒池,複用執行緒。控制執行緒的最大併發數。
一些建議
- 避免建立過多的物件;
- 不要過多使用列舉,列舉佔用的記憶體空間要比整型大;
- 常量請使用static final來修飾;
- 使用一些Android特有的資料結構,比如SparseArray和Pair等,它們都具有更好的效能;
- 適當使用軟引用和軟引用;
- 採用記憶體快取和磁碟快取;
- 儘量採用靜態內部類,這樣可以避免潛在的由於內部類而導致的記憶體洩露。
MAT 分析工具
全稱 Eclipse Memory Analyzer。
下載地址:http://www.eclipse.org/mat/downloads.php
提高程式的可維護性
- 命名規範
- 程式碼留出適當的空白區分不同的程式碼塊
- 只給關鍵的地方寫註釋
一段繁瑣的業務邏輯,應該適當拆分為幾個小的函式或者類。