240 发简信
IP属地:上海
  • 我刚刚看了源码,Handler只有在发送延迟消息才会导致内存泄露,泄露的原因是因为用了MainLooper,这个looper在整个程序的生命周期都存在,内部的MessageQueue持有了延迟发送的Message,Message持有了Handler导致Activity无法回收。
    我百度了Handler内存泄露,为啥大家的解决方案都是static+弱引用?退出Activity前removeMessage不就完事了,搞这么复杂干啥?

    Handler内存泄露及解决方案

    引子 在Java中非静态内部类或者匿名内部类都是默认持有外部类的引用的,这两个内部类的存在是依赖于外部类的对象的。比如如下例子: 上面的out.new InnerClass(...