美文网首页
简单好用的解决Handler持有引用导致内存泄漏的方法

简单好用的解决Handler持有引用导致内存泄漏的方法

作者: 耗子JF | 来源:发表于2019-07-28 20:19 被阅读0次

在使用handler的时候,常常因为handler持有Activity引用,在Activity关闭的时候,hanlder如果存在耗时操作,导致内存溢出的问题,简单加入一个WeakReference包装一下Handler就能解决啦!

public class WeakHandler<T extends WeakHandler.WeakHandlerCallBack> extends Handler {

    private WeakReference<T> weakReference;

    public WeakHandler(T t) {
        this.weakReference = new WeakReference<>(t);
    }

    public WeakHandler(Looper looper, T t) {
        super(looper);
        this.weakReference = new WeakReference<>(t);
    }

    @Override
    public final void handleMessage(Message msg) {
        super.handleMessage(msg);
        T t = weakReference.get();
        if (t != null) {
            t.handleMessage(msg);
        }
    }

    public interface WeakHandlerCallBack {
        void handleMessage(Message msg);
    }
}

使用方法和正常的Hanlder都一样,初始化的时候构造函数传入实现WeakHandlerCallBack接口的引用即可:

public class MyActivity extends Activity implements WeakHandler.WeakHandlerCallBack {

    private WeakHandler mHandler = new WeakHandler<WeakHandler.WeakHandlerCallBack>(this);
    private static final int MSG_CODE = ...;    

    public void doSomething(){
        mHandler.sendEmptyMessage(MSG_CODE);
    }

    @Override
    public void handleMessage(Message msg) {
          ......
    }
}
Next:WeakHandler继续优化

相关文章

  • 简单好用的解决Handler持有引用导致内存泄漏的方法

    在使用handler的时候,常常因为handler持有Activity引用,在Activity关闭的时候,hanl...

  • Android中常见的内存泄漏及解决

    1.Handler引起的内存泄漏 原因:该线程持有Handler的引用,而Handler也持有Activity的引...

  • Android内存泄漏

    1. 内部类隐性的持有外部类的引用导致内存泄漏 private Handler Myhander=new Hand...

  • 内存泄漏实战总结

    一.handler造成内存泄漏: 非静态内部类会持有外部类的引用,handler的message的target持有...

  • Handler内存泄漏警告处理

    Handler内存泄漏原理:非静态内部类会隐性持有外部类的引用.在Message发送过程中,引用了Handler对...

  • 内存泄漏的场景及解决办法

    内存泄漏场景,以及开发过程如何避免内存泄漏。 判断 A引用B,A的生命周期长于B。 Handler导致内存泄漏:H...

  • 📚Effective OC - Tip 52: 别忘了NSTim

    Normal NSTimer 会导致持有目标对象,因为会很容易出现循环引用内存泄漏的问题。 解决方案 Extens...

  • android内存泄漏

    一般来说,内存泄漏都是因为泄漏对象的引用被传递到该对象的范围之外,或者说内存泄漏是因为持有对象的长期引用,导致对象...

  • 内存泄露

    什么是内存泄漏? 引用导致的对象未被释放 引起内存泄漏的因素: 单例 非静态内部类持有外部类的隐式引用,而在外部类...

  • Handler的正确使用姿势

    为了避免因为handler持有activity导致的内存泄漏 可以将内部类写成静态内部类 static class...

网友评论

      本文标题:简单好用的解决Handler持有引用导致内存泄漏的方法

      本文链接:https://www.haomeiwen.com/subject/vngprctx.html