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

在使用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继续优化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容