LeakCanary 檢測洩漏點分析

2021-10-20 06:07:50 字數 1165 閱讀 5318

·  asynctask是乙個匿名的內部類,隱式的持有外部類(mainactivity)的引用,當activity被銷毀的時候,如果asynctask(**sleep 20秒,模擬了乙個耗時操作)沒有執行完成,則mainactivity將會洩漏

·  關於隱式引用----內部類可以直接去呼叫外部類的成員(屬性和方法),如果沒有持有外部類的引用,內部類是沒辦法去呼叫外部類的成員,但是內部類又沒有顯示的去指定宣告引用,所以稱之為隱式引用

anonymous class implementing com.***.***.***.callback匿名實現類,隱式引用

匿名內部類和非靜態內部類會隱式持有外部類的引用

leakcanary檢測分析總結:

3、對於需要在靜態內部類中使用非靜態外部成員變數(如:context、view ),可以在靜態內部類中使用弱引用來引用外部類的變數來避免記憶體洩漏

4、對於生命週期比activity長的內部類物件,並且內部類中使用了外部類的成員變數,可以這樣做避免記憶體洩漏:

將內部類改為靜態內部類 靜態內部類中使用弱引用來引用外部類的成員變數

5、對於不再需要使用的物件,顯示的將其賦值為null,比如使用完bitmap後先呼叫recycle(),再賦為null

6、保持對物件生命週期的敏感,特別注意單例、靜態物件、全域性性集合等的生命週期

7、ondestroy檢查資源是否釋放,物件賦值為null,避免gc不能及時**。

安卓 記憶體洩漏檢測工具 LeakCanary 使用

韓夢飛沙 yue31313 韓亞飛 han meng fei sha 313134555 qq.com 配置 build.gradle dependencies 使用說明 建立refwatcher全域性變數 使用refwatcher去監控引用,activity,fragment等中的記憶體洩漏 例子...

LeakCanary 檢測記憶體洩露

做個筆記,leakcanary 用起來方便簡單只需要兩步就可以 debug 測試 debugcompile com.squareup.leakcanary leakcanary android 1.5 testcompile com.squareup.leakcanary leakcanary an...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般 最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的 reboot才會...