Handler防止内存泄露优雅的一种写法
我们都知道在使用Handler来进行消息通讯的时候由于Activity持有Handler的强引用容易导致页面无法回收造成内存泄露的危险。在网上提出了一些解决方案大都是将强引用改为使用WeakReference的弱引用来避免对象无法回收的状况发生。这里本农提供一种封装后的Handler来供各位看官品尝。
基于WeakReference封装的BaseHandler类
public class BaseHandler<T extends BaseHandler.BaseHandlerCallBack> extends Handler {
WeakReference<T> wr;
public BaseHandler(T t) {
wr = new WeakReference<T>(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;
}
}
});