詹子聪 hace 5 años
padre
commit
872a202ea0

+ 7 - 2
app/src/main/java/com/miekir/newmvp/MainPresenter.java

@@ -6,6 +6,7 @@ import com.miekir.mvp.presenter.BasePresenter;
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
 import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
 
 /**
@@ -16,13 +17,15 @@ import io.reactivex.schedulers.Schedulers;
  * Description:
  */
 public class MainPresenter extends BasePresenter<IMainView> {
+
     @Override
     public void onTaskCancel() {
-
+        // 取消正在后台进行的任务
+        mDisposableList.dispose();
     }
 
     public void doWork() {
-        Observable.create((ObservableOnSubscribe<String>) emitter -> {
+        Disposable disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> {
             try {
                 Thread.sleep(5000);
             } catch (Exception e) {
@@ -39,5 +42,7 @@ public class MainPresenter extends BasePresenter<IMainView> {
         }, error -> {
             LogTool.d(getClass().getName(), error.getMessage());
         });
+
+        mDisposableList.add(disposable);
     }
 }

+ 7 - 1
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenter.java

@@ -9,6 +9,8 @@ import com.miekir.mvp.view.ViewHandler;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Proxy;
 
+import io.reactivex.disposables.CompositeDisposable;
+
 /**
  * Copyright (C), 2019-2020, Miekir
  *
@@ -22,7 +24,11 @@ import java.lang.reflect.Proxy;
  */
 public abstract class BasePresenter<V extends IView> extends ViewModel {
     private WeakReference<V> mViewReference;
+    protected CompositeDisposable mDisposableList = new CompositeDisposable();
 
+    /**
+     * View的代理,防止空指针判断
+     */
     private ViewHandler mViewHandler;
     public V getCallbackView() {
         mViewHandler.setView(getView());
@@ -60,7 +66,7 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
     }
 
     /**
-     * 当任务被取消时,界面还存在
+     * todo 当任务被取消时,界面还存在,响应加载框的取消
      */
     public abstract void onTaskCancel();
 }