Handler防止内存泄露优雅的一种写法

Handler防止内存泄露优雅的一种写法

我们都知道在使用Handler来进行消息通讯的时候由于Activity持有Handler的强引用容易导致页面无法回收造成内存泄露的危险。在网上提出了一些解决方案大都是将强引用改为使用WeakReference的弱引用来避免对象无法回收的状况发生。这里本农提供一种封装后的Handler来供各位看官品尝。

基于WeakReference封装的BaseHandler类

public class BaseHandler<T extends BaseHandler.BaseHandlerCallBack> extends Handler {

    WeakReference wr;

    public BaseHandler(T t) {
        wr = new WeakReference(t);
    }

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

    public interface BaseHandlerCallBack {
        public void callBack(Message msg);
    }
}

使用方法

使用方式很简单跟平常使用Handler的方式一样,直接new BaseHandler对象即可,在回调中处理msg消息内容。
public Handler mHandler=new BaseHandler<>(new BaseHandler.BaseHandlerCallBack() {
        @Override
        public void callBack(Message msg) {
            switch (msg.what){
                case 0:
                    ....
                    break;
                case 1:
                    ....
                    break;
            }
        }
    });

你可能感兴趣的:(android)