詹子聪 5 роки тому
батько
коміт
caf8d4bf20

+ 2 - 5
app/src/main/java/com/miekir/newmvp/MainActivity.java

@@ -6,12 +6,9 @@ import android.view.View;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import androidx.lifecycle.Observer;
-
 import com.miekir.mvp.bean.DataResult;
-import com.miekir.mvp.model.DataMethod;
-import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.jetpack.MvpObserver;
+import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMvpActivity;
 
 import java.util.List;
@@ -46,7 +43,7 @@ public class MainActivity extends BaseMvpActivity implements View.OnClickListene
         switch (v.getId()) {
             case R.id.view_test:
                 // 点击之后,后台执行耗时操作
-                presenter.go().observeOnce(new MvpObserver<DataResult<List<TestBean1>>>() {
+                Thread thread = presenter.go().observeOnce(new MvpObserver<DataResult<List<TestBean1>>, Thread>() {
                     @Override
                     public void onDataChanged(DataResult<List<TestBean1>> result) {
                         Toast.makeText(getApplicationContext(), result.getBean().get(0).getName(), Toast.LENGTH_SHORT).show();

+ 10 - 5
app/src/main/java/com/miekir/newmvp/TestPresenter.java

@@ -22,14 +22,14 @@ public class TestPresenter extends BasePresenter {
 
     }
 
-    public BeanLiveData<List<TestBean1>> go() {
-        final BeanLiveData<List<TestBean1>> liveData = getLiveData(true);
+    private Thread thread;
+    public BeanLiveData<List<TestBean1>, Thread> go() {
+        final BeanLiveData<List<TestBean1>, Thread> liveData = getLiveData(true);
 
-        new Thread(new Runnable() {
+        thread = new Thread(new Runnable() {
             @Override
             public void run() {
                 try {
-
                     for (int i = 0; i < 20; i++) {
                         Thread.sleep(1000);
                         Log.i("test", "io thread..." + i);
@@ -43,7 +43,9 @@ public class TestPresenter extends BasePresenter {
                     e.printStackTrace();
                 }
             }
-        }).start();
+        });
+        liveData.setCancelableTask(thread);
+        thread.start();
 
         return liveData;
     }
@@ -51,5 +53,8 @@ public class TestPresenter extends BasePresenter {
     @Override
     public void onTaskCancel() {
         super.onTaskCancel();
+        if (thread != null) {
+            thread.stop();
+        }
     }
 }

+ 1 - 1
mvp/src/main/java/com/miekir/mvp/base/BaseActivity.java

@@ -11,7 +11,6 @@ import android.view.inputmethod.InputMethodManager;
 
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.miekir.mvp.bean.DataResult;
 import com.miekir.mvp.widget.LoadingDialog;
 
 /**
@@ -52,6 +51,7 @@ public abstract class BaseActivity extends AppCompatActivity {
         mLoadingDialog.setCancelListener(new LoadingDialog.OnLoadingCancelListener() {
             @Override
             public void onLoadingCancel() {
+                // todo 这个方法不执行
                 onTaskCancel();
             }
         });

+ 4 - 5
mvp/src/main/java/com/miekir/mvp/jetpack/BeanLiveData.java

@@ -11,10 +11,9 @@ import com.miekir.mvp.presenter.BasePresenter;
  * @date 2020/11/14 21:36
  * Description:
  */
-public class BeanLiveData<D> extends MvpLiveData<DataResult<D>> {
-
-    public BeanLiveData(BasePresenter mPresenter, boolean mWidthDialog) {
-        super(mPresenter, mWidthDialog);
+public class BeanLiveData<D, C> extends MvpLiveData<DataResult<D>, C> {
+    public BeanLiveData(BasePresenter mPresenter, boolean withProgress) {
+        super(mPresenter, withProgress);
     }
 
     public void post(int responseCode, String message, D dataBean) {
@@ -22,7 +21,7 @@ public class BeanLiveData<D> extends MvpLiveData<DataResult<D>> {
             return;
         }
 
-        if (mWidthDialog) {
+        if (mWidthProgress) {
             mPresenter.dismissLoading();
         }
 

+ 11 - 5
mvp/src/main/java/com/miekir/mvp/jetpack/MvpLiveData.java

@@ -23,13 +23,18 @@ import com.miekir.mvp.presenter.BasePresenter;
  * @date 2020/11/14 20:45
  * Description:
  */
-public class MvpLiveData<T> extends MutableLiveData<T> {
+public class MvpLiveData<T, C> extends MutableLiveData<T> {
     protected BasePresenter mPresenter;
-    protected boolean mWidthDialog;
+    protected boolean mWidthProgress;
 
-    public MvpLiveData(BasePresenter mPresenter, boolean mWidthDialog) {
+    private C mTask;
+    public void setCancelableTask(C cancelableTask) {
+        mTask = cancelableTask;
+    }
+
+    public MvpLiveData(BasePresenter mPresenter, boolean withProgress) {
         this.mPresenter = mPresenter;
-        this.mWidthDialog = mWidthDialog;
+        this.mWidthProgress = withProgress;
     }
 
     private MvpObserver<T> mObserver;
@@ -44,10 +49,11 @@ public class MvpLiveData<T> extends MutableLiveData<T> {
      * 只监听一次的LiveData
      * @param observer
      */
-    public void observeOnce(MvpObserver<T> observer) {
+    public C observeOnce(MvpObserver<T> observer) {
         mObserver = observer;
         observer.setLiveData(this);
         observeForever(observer);
+        return mTask;
     }
 
     public void post(T dataBean) {

+ 3 - 3
mvp/src/main/java/com/miekir/mvp/jetpack/MvpObserver.java

@@ -9,9 +9,9 @@ import androidx.lifecycle.Observer;
  * @date 2020/11/14 20:51
  * Description: 
  */
-public abstract class MvpObserver<T> implements Observer<T> {
-    private MvpLiveData<T> liveData;
-    public void setLiveData(MvpLiveData<T> liveData) {
+public abstract class MvpObserver<T, C> implements Observer<T> {
+    private MvpLiveData<T, C> liveData;
+    public void setLiveData(MvpLiveData<T, C> liveData) {
         this.liveData = liveData;
     }
 

+ 12 - 0
mvp/src/main/java/com/miekir/mvp/model/IMvpModel.java

@@ -0,0 +1,12 @@
+package com.miekir.mvp.model;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/11/15 19:16
+ * Description:
+ */
+public interface IMvpModel {
+    void onTaskCancel();
+}

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

@@ -37,11 +37,11 @@ public abstract class BasePresenter extends ViewModel {
         return liveDataList;
     }
 
-    protected <T> BeanLiveData<T> getLiveData(boolean withDialog) {
-        if (withDialog) {
+    protected <T> BeanLiveData<T> getLiveData(boolean withProgress) {
+        if (withProgress) {
             showLoading();
         }
-        BeanLiveData<T> liveData = new BeanLiveData<>(this, withDialog);
+        BeanLiveData<T> liveData = new BeanLiveData<>(this, withProgress);
         liveDataList.add(liveData);
         return liveData;
     }