Ver Fonte

可见任务和不可见任务

詹子聪 há 5 anos atrás
pai
commit
9dcd75afbd

+ 1 - 1
app/src/main/java/com/miekir/newmvp/ui/home/article/model/LocalArticleModel.java

@@ -35,6 +35,6 @@ public class LocalArticleModel extends BaseModel implements IArticleModel {
             LogTool.d(getClass().getName(), error.getMessage());
         });
 
-        mDisposableList.add(disposable);
+        mProgressDisposableList.add(disposable);
     }
 }

+ 1 - 1
app/src/main/java/com/miekir/newmvp/ui/home/article/model/NetArticleModel.java

@@ -40,6 +40,6 @@ public class NetArticleModel extends BaseModel implements IArticleModel {
             LogTool.d(getClass().getName(), error.getMessage());
         });
 
-        mDisposableList.add(disposable);
+        mProgressDisposableList.add(disposable);
     }
 }

+ 2 - 2
app/src/main/java/com/miekir/newmvp/ui/home/article/presenter/ArticlePresenter.java

@@ -3,10 +3,10 @@ package com.miekir.newmvp.ui.home.article.presenter;
 import com.miekir.mvp.constant.MvpRepository;
 import com.miekir.mvp.model.InjectModel;
 import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.newmvp.ui.home.IArticleView;
 import com.miekir.newmvp.ui.home.article.model.IArticleModel;
 import com.miekir.newmvp.ui.home.article.model.LocalArticleModel;
 import com.miekir.newmvp.ui.home.article.model.NetArticleModel;
-import com.miekir.newmvp.ui.home.IArticleView;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -39,7 +39,7 @@ public class ArticlePresenter extends BasePresenter<IArticleView> {
             return this;
         }
         mCurrentType = type;
-        mModel.onTaskCancel();
+        mModel.onProgressTaskCancel();
 
         switch (type) {
             case MvpRepository.REPO_NET:

+ 1 - 1
app/src/main/java/com/miekir/newmvp/ui/home/article/presenter/SimpleArticlePresenter.java

@@ -44,6 +44,6 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
             LogTool.d(getClass().getName(), error.getMessage());
         });
 
-        mDisposableList.add(disposable);
+        mProgressDisposableList.add(disposable);
     }
 }

+ 10 - 4
mvp/src/main/java/com/miekir/mvp/model/BaseModel.java

@@ -12,10 +12,16 @@ import io.reactivex.disposables.CompositeDisposable;
  * Description:
  */
 public abstract class BaseModel {
-    protected CompositeDisposable mDisposableList = new CompositeDisposable();
+    protected CompositeDisposable mProgressDisposableList = new CompositeDisposable();
+    protected CompositeDisposable mBackDisposableList = new CompositeDisposable();
 
-    public void onTaskCancel() {
-        mDisposableList.dispose();
-        LogTool.d(getClass().getName(), "model cancel");
+    public void onProgressTaskCancel() {
+        mProgressDisposableList.dispose();
+        LogTool.d(getClass().getName(), "progress model cancel");
+    }
+
+    public void onBackTaskCancel() {
+        mBackDisposableList.dispose();
+        LogTool.d(getClass().getName(), "back model cancel");
     }
 }

+ 9 - 3
mvp/src/main/java/com/miekir/mvp/model/IModel.java

@@ -1,7 +1,5 @@
 package com.miekir.mvp.model;
 
-import io.reactivex.disposables.CompositeDisposable;
-
 /**
  * Copyright (C), 2019-2020, Miekir
  *
@@ -10,5 +8,13 @@ import io.reactivex.disposables.CompositeDisposable;
  * Description:
  */
 public interface IModel {
-    void onTaskCancel();
+    /**
+     * 可见任务被取消
+     */
+    void onProgressTaskCancel();
+
+    /**
+     * 不可见任务被取消
+     */
+    void onBackTaskCancel();
 }

+ 1 - 1
mvp/src/main/java/com/miekir/mvp/model/InjectModel.java

@@ -13,5 +13,5 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.FIELD)
 public @interface InjectModel {
-
+    boolean withProgress() default true;
 }

+ 36 - 21
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenter.java

@@ -1,16 +1,11 @@
 package com.miekir.mvp.presenter;
 
-import android.os.Looper;
-
 import androidx.lifecycle.ViewModel;
 
-import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.model.IModel;
 import com.miekir.mvp.view.IView;
-import com.miekir.mvp.view.ViewHandler;
 
 import java.lang.ref.WeakReference;
-import java.lang.reflect.Proxy;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -31,11 +26,25 @@ import io.reactivex.disposables.CompositeDisposable;
  */
 public abstract class BasePresenter<V extends IView> extends ViewModel {
     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() {
-        PresenterHelper.initModelList(mModelList, this);
+        PresenterHelper.initModelList(mProgressModelList, mBackModelList, this);
         onInit();
     }
 
@@ -58,29 +67,35 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
     @Override
     protected void 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();
     }
 
     /**

+ 9 - 9
mvp/src/main/java/com/miekir/mvp/presenter/PresenterHelper.java

@@ -1,11 +1,7 @@
 package com.miekir.mvp.presenter;
 
-import androidx.lifecycle.ViewModelProvider;
-import androidx.lifecycle.ViewModelStoreOwner;
-
 import com.miekir.mvp.model.IModel;
 import com.miekir.mvp.model.InjectModel;
-import com.miekir.mvp.view.IView;
 
 import java.lang.reflect.Field;
 import java.util.List;
@@ -23,14 +19,14 @@ public class PresenterHelper {
     /**
      * 初始化添加注解的变量
      */
-    public static  void initModelList(List<IModel> modelList, BasePresenter<?> presenter) {
-        modelList.clear();
+    public static  void initModelList(List<IModel> progressModelList, List<IModel> backModelList, BasePresenter<?> presenter) {
+        progressModelList.clear();
         // 这里可以获取到子类的成员变量
         Field[] fields = presenter.getClass().getDeclaredFields();
         for (Field field : fields) {
             // 获取变量上面的注解类型
-            InjectModel presenterAnnotation = field.getAnnotation(InjectModel.class);
-            if (presenterAnnotation == null) {
+            InjectModel modelAnnotation = field.getAnnotation(InjectModel.class);
+            if (modelAnnotation == null) {
                 continue;
             }
 
@@ -40,7 +36,11 @@ public class PresenterHelper {
                 Class<IModel> type = (Class<IModel>) field.getType();
                 IModel model = type.newInstance();
                 field.set(presenter, model);
-                modelList.add(model);
+                if (modelAnnotation.withProgress()) {
+                    progressModelList.add(model);
+                } else {
+                    backModelList.add(model);
+                }
             } catch (IllegalAccessException | InstantiationException e) {
                 e.printStackTrace();
             } catch (ClassCastException e) {

+ 1 - 1
mvp/src/main/java/com/miekir/mvp/view/BaseMvpActivity.java

@@ -19,7 +19,7 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
     @Override
     public void onTaskCancel() {
         for (BasePresenter<?> viewModel : mInjectPresenters) {
-            viewModel.onTaskCancel();
+            viewModel.onProgressTaskCancel();
         }
     }