一个BUG调一天之“android.view.WindowLeaked: Activity *** has leaked window:“

    技术2022-07-11  76

    记录;再一次一个BUG调一天;

    起因:

    发生在重构 APP 的时候;

    首先实现了,跳转新页面时 finish() 掉之前页面;其次对 新建 AlertDialog 的方法抽取成静态方法;

    结果

    重复崩溃;提示:AlertDialog 在活动被回收前没有及时回收,造成内存泄漏

    分析

    分析?还没有分析功能;根据网络资料:是在活动销毁之前没有回收 AlertDialog ;然后我就反复反复回收 AlertDialog ,看见一个回收一个;无果…根据反复排查,由于这里将新建 AlertDialog 写在了一个工具类里,通过静态方法调用,所以钻进牛角尖:这个 AlertDialog 要么是没有回收干净,要么就是不能这么静态的创建!

    原来如此

    最后的最后,其实这句报错的意思是:没有来的及回收 AlertDialog ,你就把他所依附的活动关闭了!那么问题来了,不要总是想着回收 AlertDialog 出问题;会不会是活动结束的过早?就是,跳转新页面时 finish() 的方法,写错了位置!

    错在

    AlertDialog 刚显示,就实现了跳转,也就是实现了 finish() 本活动;所以,AlertDialog 没反应过来;一天改不出来的原因在于;一是没有分析问题!二是理解错了;误以为是 AlertDialog 的锅;三是没有 DEBUG;如果使用了 debug 也绝不会这样!
    Processed: 0.009, SQL: 9