在Presenter層請求網(wǎng)絡(luò)或者處理延遲操作過程中衷笋,用戶關(guān)閉當(dāng)前Activity就會造成空指針抽减,所以每次調(diào)用View的時候都要對View做空判斷。
下面使用動態(tài)代理解決空指針問題
public class BasePresenter<T extends IBaseView> implements IBasePresenter {
private SoftReference<BaseView> mReferenceView;
protected T mView;
@SuppressWarnings("unchecked")
@Override
public void attachView(T view) {
mReferenceView = new SoftReference<>(view);
this.mView = (T) Proxy.newProxyInstance(view.getClass().getClassLoader(), view.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
if (mReferenceView == null || mReferenceView.get() == null) {
return null;
}
return method.invoke(mReferenceView.get(), objects);
}
});
}
@Override
public void detachView() {
mReferenceView.clear();
mReferenceView = null;
}
}