Android 效能優化細則

2021-07-11 01:28:30 字數 2078 閱讀 5831

android performance patterns: rescue tips

<1> : 避免「壞」表現:

避免堵塞主線程

避免可能引發大範圍重繪的不必要的重繪

用 relativelayout 來減少布局層級

避免在 linearlayout 中使用巢狀的 weight 屬性(因為weight屬性會使每個子view進行兩次measure)

避免使用沒有恰當處理的自定義view

避免建立沒必要的物件

將常量宣告為 static final(static比普通變數快 15% - 20%)

使用基本資料型別(integer、float 比基本型別慢兩倍)

避免內部的 getter 和 setter(直接訪問屬性可以快3倍)

使用改進的迴圈語法【譯者注:這裡應該是指for each迴圈】

對私有的內部類考慮使用包訪問級別代替私有訪問級別

謹慎使用native方法

<2> :自定義view

遵循kiss原則

在布局中使用merge標籤來作為根標籤(避免額外的viewgroup)

使用include標籤(便於布局的復用)

避免不必要的布局

不要在ondraw中申請記憶體或者做複雜邏輯

去除不必要的invalidate()呼叫

考慮建立自己的viewgroup

用recyclerview替代listview和gridview

<3> : 避免記憶體抖動

不要申請大量不必要的物件記憶體:

1, 不可變物件:string

2, 自動裝箱:integer, boolean...

考慮使用物件池並快取來減少記憶體抖動

留心enum型別的開銷(乙個指向列舉型別的引用就要佔據4個位元組)

<4> : 避免記憶體洩漏

不要在內部類裡洩漏context例項

不要在activity裡洩漏view例項

使用內部靜態類優於非靜態的

除非鍵都是weakreference,否則不要使用weakhashmap作為快取

<5> : cpu

不要巢狀多通路布局

當需要時才去進行複雜的計算【譯者注:類似懶載入】

快取複雜計算的結果以復用

考慮 renderscript 的效能

盡可能減少主線程的工作

<6> : 避免過度繪製

精簡drawable

在透明部分使用.9圖

設定view的透明度時多注意

去除view中無用的背景

<7> : bitmap

將bitmap解碼為需要的尺寸:bitmapfactory.options( insamplesize, indensity, intargetdensity)

載入bitmap到記憶體時,設定尺寸為顯示尺寸

如無必要不要進行縮放

使用lru快取

<8> : service

除非service在處理事務否則不要讓其保持執行。同時也要小心stopservice當service工作完成時

系統傾向保留有service執行的程序,那麼被service占用的記憶體將無法被其他程序使用或者被記憶體置換

限制service生命週期的最佳實踐是使用intentservice,它會在工作完成後結束自身

<9> : 執行緒

維護住當前執行緒的引用,以便你之後可能先打斷該執行緒。例如:當網路連線失敗你可以取消該執行緒

<10> : 避免anr

ui執行緒中做的事越少越好

如果應用正在後台響應使用者的輸入,最好顯示進度給使用者(例如顯示乙個進度條)

使用systrace或traceview等效能工具來檢測應用響應能力的瓶頸

如果你的應用有乙個非常耗時的初始化過程,考慮使用啟動頁或者盡快渲染主要的view,表明正在載入中並且正在顯示非同步的資訊

Android效能優化

android效能優化 1.http用gzip壓縮,設定連線超時時間和響應超時時間 http請求按照業務需求,分為是否可以快取和不可快取,那麼在無網路的環境中,仍然通過快取的httpresponse瀏覽部分資料,實現離線閱讀。2.listview 效能優化 1 復用convertview 在geti...

Android效能優化

1.節制地使用service 如果應用程式當中需要使用service來執行後台任務的話,請一定要注意只有當任務正在執行的時候才應該讓service執行起來。另外,當任務執行完之後去停止service的時候,要小心service停止失敗導致記憶體洩露的情況 2.當介面不可見時釋放記憶體 當使用者開啟另...

Android效能優化

本篇主要是對 google推出的效能優化典範 進行乙個通篇的整理 主要在於一些具體的優化技巧 至於60fps 掉幀 gc 記憶體抖動 閾值 等等這些效能術語的概念裡面不做多概括,請自行查閱 本篇從以下幾點延伸擴充套件 systrace systrace 在android ddms 裡自帶,可以用來跟...