問題: 記憶體溢位(記憶體),卡頓或anr(cpu)
布局優化
首先 刪除布局中無用的控制項和層級,有選擇的使用效能低的viewgroup,如linearlayout.
效能 :布局層級少效能好,
cpu 花費時間比較:framelayout = linearlayout < relativelayout
其次 ,通過採用 < include> 標籤,< merge >標籤和 viewstub
< include > 用於布局重用
< merge > 一般和< include > 搭配使用,減少布局的層級
viewstub 提供按需載入的功能
繪製優化
指- view 的 ondraw 方法避免大量操作
a. ondraw 不要建立新的區域性物件,因為 ondraw 會被頻繁呼叫,產生大量臨時物件,占用記憶體,導致頻繁gc降低效率
b. ondraw 方法不要做耗時操作,也不能執行成千上萬的迴圈操作。因為大量的迴圈搶占cpu的時間片,造成view繪製不流暢。
新增log監控時間 :
在函式開始 :long time = system.nanotime();
在函式結尾:log.info(「tastetime:」 + (system.nanotime() - time));
記憶體洩漏優化
記憶體洩漏-申請的記憶體不能及時釋放,memory leak
場景一:靜態變數引用導致的記憶體洩露
public
class
mainactivity
extends
activity
}
原因:activity由於被靜態變數scontext引用,無法正常銷毀。靜態變數隨著類的載入而存在,隨著類的消失而消失,不會被gc**。
解決方法:不要設定成 靜態的變數
場景二:單例模式導致記憶體洩漏
單例模式的 testmanager 中可以接收外部註冊並將外部的***儲存起來,有註冊函式 ,還有解註冊函式。
activity 向 testmanager 註冊監聽,由於缺少解註冊的操作引起記憶體洩露。
解決方法:新增解註冊操作
場景三:屬性的動畫導致的記憶體洩露
有一種無限迴圈的屬性動畫
objectanimator animator = objectanimator.offloat(mbutton, 「rotation」, 0, 360).setduration(2000);
animator.setrepeatcount(valueanimator.infinite);
animator.start();
原因:這個時候 activity 的 view 會被動畫持有,而 view 又持有activity ,最終 activity 無法釋放。
解決方法:在 activity 的 ondestory() 方法中新增 animator.cancel() 來停止動畫
分析工具
卡頓問題– blockcanary 請檢視準備☞android 效能優化☞卡頓問題工具 blockcanary
記憶體洩漏問題-leakcanary 請檢視 準備☞android 效能優化☞ 記憶體洩露工具 leakcanary
**檢測
review **相關(正在更新)
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 裡自帶,可以用來跟...