Handler使用弱引用優(yōu)化

定義一個DefaultHandler類
public abstract class DefaultHandler<T> extends Handler {

    protected final WeakReference<Fragment> mReference;
    protected final WeakReference<T> mReferenceT;

    public DefaultHandler(Fragment context, T t) {
        mReference = new WeakReference<>(context);
        mReferenceT = new WeakReference<>(t);
    }

    @Override
    public final void handleMessage(Message msg) {
        super.handleMessage(msg);
        Fragment context = mReference.get();
        if (context != null) {
            if (context instanceof Fragment && ((Activity) context.getActivity()).isFinishing()) {
                removeCallbacksAndMessages();
            } else {
                T t = mReferenceT.get();
                if (t != null) {
                    this.handleMessage(msg, t);
                } else {
                }
            }
        } else {
            removeCallbacksAndMessages();
        }
    }

    public abstract void handleMessage(Message msg, T t);

    public void removeCallbacksAndMessages() {
        removeCallbacksAndMessages(null);
        mReference.clear();
        mReferenceT.clear();
    }

}
在fragmeng中引用
private VerifyHandler handler = new VerifyHandler(this, this);

    private static class VerifyHandler extends DefaultHandler<WellControlMonitorFragment> {
        public VerifyHandler(WellControlMonitorFragment context, WellControlMonitorFragment fragment) {
            super(context, fragment);
        }

        @Override
        public void handleMessage(Message msg, WellControlMonitorFragment fragment) {
            if (msg.obj instanceof RunControlInfo) {
                RunControlInfo controlInfo = (RunControlInfo) msg.obj;
                fragment.showCurrentData(controlInfo.getTnm(), controlInfo.getVal() + "");
            } else {
                for (int i = 0; i < fragment.tempData.getData().getData().size(); i++) {
                    fragment.showCurrentData(fragment.tempData.getData().getData().get(i).getTnm(), fragment.tempData.getData().getData().get(i).getVal() + "");
                }
            }
        }
    }
       Message msg = Message.obtain();
            msg.obj = runControlInfo;
            handler.sendMessage(msg);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容