记录;再一次一个BUG调一天;
起因:
发生在重构 APP 的时候;
- 首先实现了,跳转新页面时 finish() 掉之前页面;
- 其次对 新建 AlertDialog 的方法抽取成静态方法;
结果
- 重复崩溃;提示:
AlertDialog 在活动被回收前没有及时回收,造成内存泄漏
分析
- 分析?还没有分析功能;根据网络资料:是在活动销毁之前没有回收 AlertDialog ;然后我就反复反复回收 AlertDialog ,看见一个回收一个;无果…
- 根据反复排查,由于这里将新建 AlertDialog 写在了一个工具类里,通过静态方法调用,所以钻进牛角尖:
这个 AlertDialog 要么是没有回收干净,要么就是不能这么静态的创建!
原来如此
- 最后的最后,其实这句报错的意思是:没有来的及回收 AlertDialog ,你就把他所依附的活动关闭了!
- 那么问题来了,不要总是想着回收 AlertDialog 出问题;会不会是活动结束的过早?
- 就是,跳转新页面时 finish() 的方法,写错了位置!
错在
- AlertDialog 刚显示,就实现了跳转,也就是实现了 finish() 本活动;所以,AlertDialog 没反应过来;
- 一天改不出来的原因在于;一是没有分析问题!二是理解错了;误以为是 AlertDialog 的锅;三是没有 DEBUG;如果使用了 debug 也绝不会这样!