|
@@ -1,16 +1,11 @@
|
|
|
package com.miekir.mvp.presenter;
|
|
package com.miekir.mvp.presenter;
|
|
|
|
|
|
|
|
-import android.os.Looper;
|
|
|
|
|
-
|
|
|
|
|
import androidx.lifecycle.ViewModel;
|
|
import androidx.lifecycle.ViewModel;
|
|
|
|
|
|
|
|
-import com.miekir.common.utils.LogTool;
|
|
|
|
|
import com.miekir.mvp.model.IModel;
|
|
import com.miekir.mvp.model.IModel;
|
|
|
import com.miekir.mvp.view.IView;
|
|
import com.miekir.mvp.view.IView;
|
|
|
-import com.miekir.mvp.view.ViewHandler;
|
|
|
|
|
|
|
|
|
|
import java.lang.ref.WeakReference;
|
|
import java.lang.ref.WeakReference;
|
|
|
-import java.lang.reflect.Proxy;
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Optional;
|
|
import java.util.Optional;
|
|
@@ -31,11 +26,25 @@ import io.reactivex.disposables.CompositeDisposable;
|
|
|
*/
|
|
*/
|
|
|
public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
private WeakReference<V> mViewReference;
|
|
private WeakReference<V> mViewReference;
|
|
|
- protected CompositeDisposable mDisposableList = new CompositeDisposable();
|
|
|
|
|
- private List<IModel> mModelList = new ArrayList<>();
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 有进度的可取消任务
|
|
|
|
|
+ */
|
|
|
|
|
+ protected CompositeDisposable mProgressDisposableList = new CompositeDisposable();
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 后台没有进度的可取消任务
|
|
|
|
|
+ */
|
|
|
|
|
+ protected CompositeDisposable mBackDisposableList = new CompositeDisposable();
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 有进度的可取消任务, for model
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<IModel> mProgressModelList = new ArrayList<>();
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 后台没有进度的可取消任务,for model
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<IModel> mBackModelList = new ArrayList<>();
|
|
|
|
|
|
|
|
public BasePresenter() {
|
|
public BasePresenter() {
|
|
|
- PresenterHelper.initModelList(mModelList, this);
|
|
|
|
|
|
|
+ PresenterHelper.initModelList(mProgressModelList, mBackModelList, this);
|
|
|
onInit();
|
|
onInit();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -58,29 +67,35 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
@Override
|
|
@Override
|
|
|
protected void onCleared() {
|
|
protected void onCleared() {
|
|
|
super.onCleared();
|
|
super.onCleared();
|
|
|
- detachView();
|
|
|
|
|
|
|
+ // 界面被销毁时,可见和不可见的任务都要取消
|
|
|
|
|
+ onBackTaskCancel();
|
|
|
|
|
+ onProgressTaskCancel();
|
|
|
|
|
+ if (mViewReference != null) {
|
|
|
|
|
+ mViewReference.clear();
|
|
|
|
|
+ mViewReference = null;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 界面被销毁时
|
|
|
|
|
|
|
+ * 没有进度条的任务被取消
|
|
|
*/
|
|
*/
|
|
|
- private void detachView() {
|
|
|
|
|
- onTaskCancel();
|
|
|
|
|
- if (mViewReference != null) {
|
|
|
|
|
- mViewReference.clear();
|
|
|
|
|
- mViewReference = null;
|
|
|
|
|
|
|
+ private void onBackTaskCancel() {
|
|
|
|
|
+ mBackDisposableList.dispose();
|
|
|
|
|
+ for (IModel model : mBackModelList) {
|
|
|
|
|
+ model.onProgressTaskCancel();
|
|
|
}
|
|
}
|
|
|
|
|
+ mBackModelList.clear();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * todo 当任务被取消时,界面还存在,响应加载框的取消
|
|
|
|
|
|
|
+ * 界面还存在,可见任务被取消,响应加载框的取消
|
|
|
*/
|
|
*/
|
|
|
- public void onTaskCancel() {
|
|
|
|
|
- mDisposableList.dispose();
|
|
|
|
|
- for (IModel model : mModelList) {
|
|
|
|
|
- model.onTaskCancel();
|
|
|
|
|
|
|
+ public void onProgressTaskCancel() {
|
|
|
|
|
+ mProgressDisposableList.dispose();
|
|
|
|
|
+ for (IModel model : mProgressModelList) {
|
|
|
|
|
+ model.onProgressTaskCancel();
|
|
|
}
|
|
}
|
|
|
- mModelList.clear();
|
|
|
|
|
|
|
+ mProgressModelList.clear();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|