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

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

public class WeakHandler extends Handler {

    private WeakReference 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(this);
    private static final int MSG_CODE = ...;    

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

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

你可能感兴趣的:(简单好用的解决Handler持有引用导致内存泄漏的方法)