Android性能優化方法

1.佈局優化

佈局優化的思想很簡單,就是儘量減少佈局文件的層級。

  1. 刪除佈局中無用的控件和層級,其次有選擇的使用性能較低的ViewGroup。FrameLayout和LinearLayout一樣都是一種簡單高效的ViewGroup,可以優先考慮使用。對於需要通過嵌套的方式來實現的界面,建議使用RelativeLayout。

  2. 採用include標籤、merge標籤和ViewStub。include標籤主要用於佈局重用,merge標籤一般和include標籤配合使用,它可以降低減少佈局的層級,而ViewStub則提供了按需加載的功能,當需要時纔將ViewStub中的佈局加載到內存,提高了程序的初始化效率。

2.繪製優化

繪製優化是指View的onDraw方法要避免執行大量的操作。

  1. onDraw不要創建新的局部對象。
  2. onDraw不要執行耗時操作。

3.內存泄露優化

內存泄露的優化主要在於兩個方面,一方面開發過程中避免寫出有內存泄漏的代碼,另一方面通過一些分析工具(如LeakCanary、MAT)找出潛在的內存泄漏的原因。

  1. 使用LeakCanary開源控件,可以很好的幫助我們發現內存泄露的情況
  2. 注意Activity的泄漏
    例如Handler導致的Activity泄漏,爲了解決這個問題,可以在UI退出之前,執行remove Handler消息隊列中的消息與runnable對象。或者是使用Static + WeakReference的方式來達到斷開Handler與Activity之間存在引用關係的目的。

  3. 考慮使用Application Context而不是Activity Context

  4. 注意臨時Bitmap對象的及時回收
  5. 注意監聽器的註銷
    在Android程序裏面存在很多需要register與unregister的監聽器,我們需要確保在合適的時候及時unregister那些監聽器。

  6. 注意緩存容器中的對象泄漏

  7. 注意WebView的泄漏
    通常根治這個問題的辦法是爲WebView開啓另外一個進程,通過AIDL與主進程進行通信,WebView所在的進程可以根據業務的需要選擇合適的時機進行銷燬,從而達到內存的完整釋放。
  8. 注意Cursor對象是否及時關閉

4.ListView 和Bitmap優化

針對ListView的優化:

  1. 採用ViewHolder避免在getView中執行耗時操作
  2. 根據滑動狀態來控制任務的執行頻率,例如當列表快速滑動時顯然不適合開啓大量的異步任務。
  3. 可以嘗試開啓硬件加速來使滑動更流暢

針對Bitmap的優化:
主要是通過BitmapFactory.Options來根據需求對圖片進行採樣,採樣過程中主要用到了BitmapFactory.Options的inSampleSize參數。

5.線程優化

採用線程池,避免程序中存在大量的Thread。線程池可以重用內部的線程,從而避免了線程的創建和銷燬帶來的性能開銷;同時線程池還可以有效的控制線程池的最大併發數,避免大量線程因互相搶佔系統資源從而導致阻塞現象的出現。

6.優化建議

  1. 避免創建過多的對象
  2. 不要過多使用枚舉,枚舉佔用的內存空間要比整型大
  3. 常量使用static final來修飾
  4. 使用一些Android特有的數據結構,比如SpareArray和Pair等,它們具有更好的性能
  5. 適當使用軟引用和弱引用
  6. 採用內存緩存和磁盤緩存
  7. 儘量採用靜態內部類,這樣可以避免潛在的由於內部類導致的內存泄露
  8. 使用ProGuard來剔除不需要的代碼
發佈了29 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章