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

2019-07-28  本文已影响0人  耗子JF

在使用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继续优化
上一篇 下一篇

猜你喜欢

热点阅读