內存泄漏問題記錄:ReportFragment was never GCed but no leak found

問題情況

  1. 使用內存檢測leakcanary進行相關檢測。
  2. 頁面返回時候報錯內存如下:
    ReportFragment was never GCed but no leak found

問題分析

  1. 不是常規的內存泄漏,常規應該報錯泄漏引用鏈。
  2. 一臉懵逼,不知道。
  3. 因爲在頁面中使用了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;
        }
    }

不再報內存問題,解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章