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 裡自帶,可以用來跟...