準備 Android 效能優化

2021-08-25 11:14:27 字數 1686 閱讀 5348

問題: 記憶體溢位(記憶體),卡頓或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 裡自帶,可以用來跟...