問題情況
- 使用內存檢測leakcanary進行相關檢測。
- 頁面返回時候報錯內存如下:
ReportFragment was never GCed but no leak found
問題分析
- 不是常規的內存泄漏,常規應該報錯泄漏引用鏈。
- 一臉懵逼,不知道。
- 因爲在頁面中使用了time和timertask相關操作,所以懷疑是這兩個搗的鬼。
問題解決
因爲剛開始直接報出了泄漏引用鏈,time和timertask搗的鬼,進行相關操作如下:
Lifecycle檢測,在onDestroy的時候進行關閉操作:
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
if (null != timerTask) {
timerTask.cancel();
timerTask = null;
}
timer = null;
}
操作之後報錯了上述的錯誤:ReportFragment was never GCed but no leak found
一臉懵逼不知道什麼情況之後,才發現自己粗心,關閉了timetask但是沒有關閉timer,置爲null,不引用,但是timer卻沒有關閉。
最終關閉代碼如下:
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
if (null != timerTask) {
timerTask.cancel();
timerTask = null;
}
if (null != timer) {
timer.cancel();
timer = null;
}
}
不再報內存問題,解決。