一個BUG調一天之“android.view.WindowLeaked: Activity *** has leaked window:“

記錄;再一次一個BUG調一天;

起因:

發生在重構 APP 的時候;

  1. 首先實現了,跳轉新頁面時 finish() 掉之前頁面;
  2. 其次對 新建 AlertDialog 的方法抽取成靜態方法;

結果

  1. 重複崩潰;提示:AlertDialog 在活動被回收前沒有及時回收,造成內存泄漏

分析

  1. 分析?還沒有分析功能;根據網絡資料:是在活動銷燬之前沒有回收 AlertDialog ;然後我就反覆反覆回收 AlertDialog ,看見一個回收一個;無果…
  2. 根據反覆排查,由於這裏將新建 AlertDialog 寫在了一個工具類裏,通過靜態方法調用,所以鑽進牛角尖:這個 AlertDialog 要麼是沒有回收乾淨,要麼就是不能這麼靜態的創建!

原來如此

  1. 最後的最後,其實這句報錯的意思是:沒有來的及回收 AlertDialog ,你就把他所依附的活動關閉了!
  2. 那麼問題來了,不要總是想着回收 AlertDialog 出問題;會不會是活動結束的過早?
  3. 就是,跳轉新頁面時 finish() 的方法,寫錯了位置!

錯在

  1. AlertDialog 剛顯示,就實現了跳轉,也就是實現了 finish() 本活動;所以,AlertDialog 沒反應過來;
  2. 一天改不出來的原因在於;一是沒有分析問題!二是理解錯了;誤以爲是 AlertDialog 的鍋;三是沒有 DEBUG;如果使用了 debug 也絕不會這樣!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章