記錄;再一次一個BUG調一天;
起因:
發生在重構 APP 的時候;
- 首先實現了,跳轉新頁面時 finish() 掉之前頁面;
- 其次對 新建 AlertDialog 的方法抽取成靜態方法;
結果
- 重複崩潰;提示:
AlertDialog 在活動被回收前沒有及時回收,造成內存泄漏
分析
- 分析?還沒有分析功能;根據網絡資料:是在活動銷燬之前沒有回收 AlertDialog ;然後我就反覆反覆回收 AlertDialog ,看見一個回收一個;無果…
- 根據反覆排查,由於這裏將新建 AlertDialog 寫在了一個工具類裏,通過靜態方法調用,所以鑽進牛角尖:
這個 AlertDialog 要麼是沒有回收乾淨,要麼就是不能這麼靜態的創建!
原來如此
- 最後的最後,其實這句報錯的意思是:沒有來的及回收 AlertDialog ,你就把他所依附的活動關閉了!
- 那麼問題來了,不要總是想着回收 AlertDialog 出問題;會不會是活動結束的過早?
- 就是,跳轉新頁面時 finish() 的方法,寫錯了位置!
錯在
- AlertDialog 剛顯示,就實現了跳轉,也就是實現了 finish() 本活動;所以,AlertDialog 沒反應過來;
- 一天改不出來的原因在於;一是沒有分析問題!二是理解錯了;誤以爲是 AlertDialog 的鍋;三是沒有 DEBUG;如果使用了 debug 也絕不會這樣!