说起Handler,我们都知道在开发中为了避免内存泄漏,要采取静态内部类+弱引用的形式,并且在onDestroy中调用mHandler.removeCallbacksAndMessages(null);
方法移除全部消息。本着不重复造轮子的原则,特意整了一个抽象泛型基类AbstractWeakHandler,便于快速使用。
public abstract class AbstractWeakHandler<T> extends Handler {
private WeakReference<T> mWeakReference;
protected T mOwner;
protected abstract void weakHandleMessage(Message msg);
public AbstractWeakHandler(T owner) {
mWeakReference = new WeakReference<>(owner);
}
public AbstractWeakHandler(T owner, Looper looper) {
super(looper);
mWeakReference = new WeakReference<>(owner);
}
@Override
public void handleMessage(Message msg) {
mOwner = mWeakReference.get();
if (mOwner == null) {
getLooper().quit();
return;
}
weakHandleMessage(msg);
super.handleMessage(msg);
}
}
使用举例:
private static class WeakHandler extends AbstractWeakHandler<WelcomeActivity> {
public WeakHandler(WelcomeActivity owner) {
super(owner);
}
@Override
protected void weakHandleMessage(Message msg) {
switch (msg.what) {
case MSG_NOT_OK:
//do some thing here
break;
case MSG_OK:
//do some thing here
break;
default:
break;
}
}
}
@Override
protected void onDestroy() {
mWeakHandler.removeCallbacksAndMessages(null);
super.onDestroy();
Log.d(TAG, "forlan debug onDestroy>>>>>>>>>");
}