Android apk开发:不重复造轮子,抽象泛型基类WeakHandler

说起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>>>>>>>>>");
}
发布了42 篇原创文章 · 获赞 24 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u010725171/article/details/88312798