Explorar el Código

自动取消任务

詹子聪 hace 5 años
padre
commit
c02e270805

+ 16 - 12
app/build.gradle

@@ -1,5 +1,5 @@
 apply plugin: 'com.android.application'
-apply plugin: 'com.hujiang.android-aspectjx'
+//apply plugin: 'com.hujiang.android-aspectjx'
 
 
 android {
@@ -14,11 +14,18 @@ android {
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
+        debug {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField("boolean", "IS_DEBUG", 'true')
+        }
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField("boolean", "IS_DEBUG", 'false')
         }
     }
+
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
@@ -29,20 +36,17 @@ android {
     productFlavors {
         dev {
             // 开发环境宿舍服务器
-            buildConfigField("String", "BASE_URL", '"http://192.168.0.190:8080/"')
-            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://192.168.0.190/"')
+            buildConfigField("String", "BASE_URL", '"http://192.168.0.190:1935/"')
         }
 
         rel {
             // 正式上线
-            buildConfigField("String", "BASE_URL", '"http://app.icsmabc.cyou:8856/"')
-            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://icsmabc.cyou/eden/images/"')
+            buildConfigField("String", "BASE_URL", '"http://app.jianjie.life:11111/"')
         }
 
         company {
             // 开发2
-            buildConfigField("String", "BASE_URL", '"http://10.16.0.153:8080/"')
-            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://10.16.0.153/"')
+            buildConfigField("String", "BASE_URL", '"http://10.16.0.184:8080/"')
         }
     }
 }
@@ -58,11 +62,11 @@ dependencies {
     implementation project(path: ':common')
     implementation project(path: ':mvp')
 
-    compile 'org.aspectj:aspectjrt:1.8.+'
+//    compile 'org.aspectj:aspectjrt:1.8.+'
     // 动态权限申请firefly1126/android_permission_aspectjx
-    compile 'com.firefly1126.permissionaspect:permissionaspect:1.0.1'
+//    compile 'com.firefly1126.permissionaspect:permissionaspect:1.0.1'
 }
 
-aspectjx {
-    exclude  "android.support",'androidx','com.google','com.squareup.leakcanary','com.squareup.leakcanary.core','com.alipay','org.apache','com.tencent'
-}
+//aspectjx {
+//    exclude  "android.support",'androidx','com.google','com.squareup.leakcanary','com.squareup.leakcanary.core','com.alipay','org.apache','com.tencent'
+//}

+ 6 - 2
app/src/main/java/com/miekir/newmvp/aspectj/click/SingleClickAspect.java

@@ -1,5 +1,6 @@
 package com.miekir.newmvp.aspectj.click;
 
+/*
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -19,12 +20,14 @@ public class SingleClickAspect {
 
     }
     
-     /**
+     */
+/**
      * joinPoint.proceed() 执行注解所标识的代码
      * @After 可以在方法前插入代码
      * @Before 可以在方法后插入代码
      * @Around 可以在方法前后各插入代码
-     */
+     *//*
+
     @Around("methodAnnotated()")
     public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
         //获取系统当前时间
@@ -39,3 +42,4 @@ public class SingleClickAspect {
         }
     }
 }
+*/

+ 3 - 2
network/src/main/java/com/miekir/network/RetrofitHelper.java

@@ -1,10 +1,11 @@
-package com.miekir.network;
+package com.miekir.newmvp.net;
 
 import android.content.Context;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.miekir.common.utils.ContextManager;
+import com.miekir.newmvp.BuildConfig;
 import com.readystatesoftware.chuck.ChuckInterceptor;
 
 import java.io.IOException;
@@ -129,7 +130,7 @@ public class RetrofitHelper {
         HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
             @Override
             public void log(String message) {
-                if (BuildConfig.IS_DEBUG_MODE) {
+                if (BuildConfig.IS_DEBUG) {
                     Log.i("Retrofit:", message);
                 }
             }

+ 1 - 2
app/src/main/java/com/miekir/newmvp/ui/MvpApplication.java

@@ -2,7 +2,6 @@ package com.miekir.newmvp.ui;
 
 import android.app.Application;
 
-import com.firefly1126.permissionaspect.PermissionCheckSDK;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -15,6 +14,6 @@ public class MvpApplication extends Application {
     @Override
     public void onCreate() {
         super.onCreate();
-        PermissionCheckSDK.init(this);
+        //PermissionCheckSDK.init(this);
     }
 }

+ 7 - 4
app/src/main/java/com/miekir/newmvp/ui/home/HomeActivity.java

@@ -1,22 +1,24 @@
 package com.miekir.newmvp.ui.home;
 
-import android.Manifest;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 
-import com.hujiang.permissiondispatcher.NeedPermission;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMvpActivity;
 import com.miekir.newmvp.R;
 import com.miekir.newmvp.ui.home.article.presenter.ArticlePresenter;
+import com.miekir.newmvp.ui.home.article.presenter.SimpleArticlePresenter;
 
 public class HomeActivity extends BaseMvpActivity implements View.OnClickListener, IArticleView {
 
     @InjectPresenter
     ArticlePresenter mArticlePresenter;
 
+    @InjectPresenter
+    SimpleArticlePresenter mSimplePresenter;
+
     @Override
     public int getLayoutId() {
         return R.layout.activity_main;
@@ -36,14 +38,15 @@ public class HomeActivity extends BaseMvpActivity implements View.OnClickListene
                 break;
             case R.id.btn_task:
                 // 点击之后,后台执行耗时操作
-                mArticlePresenter.fetchArticleData();
+                //mArticlePresenter.fetchArticleData();
+                mSimplePresenter.doWork();
                 break;
             default:
                 break;
         }
     }
 
-    @NeedPermission(permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE})
+//    @NeedPermission(permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE})
     private void startNewActivity() {
         startActivity(new Intent(HomeActivity.this, HomeActivity.class));
     }

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

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

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

@@ -44,7 +44,5 @@ public class NetArticleModel extends BaseModel implements IArticleModel {
         }, error -> {
             LogTool.d(getClass().getName(), error.getMessage());
         });
-
-        mProgressDisposableList.add(disposable);
     }
 }

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

@@ -1,5 +1,7 @@
 package com.miekir.newmvp.ui.home.article.presenter;
 
+import android.app.Application;
+
 import com.miekir.mvp.constant.MvpRepository;
 import com.miekir.mvp.model.InjectModel;
 import com.miekir.mvp.presenter.BasePresenter;
@@ -24,6 +26,10 @@ public class ArticlePresenter extends BasePresenter<IArticleView> {
     @InjectModel
     private LocalArticleModel mLocalModel;
 
+    public ArticlePresenter(Application application) {
+        super(application);
+    }
+
 
     @Override
     public void onInit() {

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

@@ -1,14 +1,16 @@
 package com.miekir.newmvp.ui.home.article.presenter;
 
+import android.app.Application;
+
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.network.widget.observe.MvpObserver;
 import com.miekir.newmvp.ui.home.IArticleView;
+import com.rxjava.rxlife.RxLife;
 
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
 import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
 import io.reactivex.observers.DisposableObserver;
 import io.reactivex.schedulers.Schedulers;
 
@@ -21,6 +23,10 @@ import io.reactivex.schedulers.Schedulers;
  */
 public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
 
+    public SimpleArticlePresenter(Application application) {
+        super(application);
+    }
+
     @Override
     public void onInit() {}
 
@@ -28,28 +34,26 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
      * 没加载框,可手动取消的任务
      */
     public void doWork() {
-        showProgress();
-        Disposable disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> {
+        //showProgress();
+        Observable.create((ObservableOnSubscribe<String>) emitter -> {
             try {
                 Thread.sleep(5000);
             } catch (Exception e) {
                 e.printStackTrace();
             }
             emitter.onNext("");
-            emitter.onComplete();
-        })
-        .subscribeOn(Schedulers.io())
-        .observeOn(AndroidSchedulers.mainThread())
-        .subscribe(next -> {
-            LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().getName());
-            post(view -> view.onArticleResult("result"));
-            hideProgress();
-        }, error -> {
-            hideProgress();
-            LogTool.d(getClass().getName(), error.getMessage());
-        });
+            emitter.onComplete();})
+            .subscribeOn(Schedulers.io())
+            .as(RxLife.asOnMain(this))
+            .subscribe(next -> {
+                LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().getName());
+                post(view -> view.onArticleResult("result"));
+                //hideProgress();
+            }, error -> {
+                hideProgress();
+                LogTool.d(getClass().getName(), error.getMessage());
+            });
 
-        mBackDisposableList.add(disposable);
     }
 
     /**
@@ -69,7 +73,6 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
             }
         };
 
-        mProgressDisposableList.add(disposable);
 
         Observable.create((ObservableOnSubscribe<String>) emitter -> {
             try {

+ 1 - 1
build.gradle

@@ -8,7 +8,7 @@ buildscript {
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:3.6.1'
-        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
+//        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
     }
 }
 

+ 7 - 4
common/build.gradle

@@ -47,15 +47,18 @@ dependencies {
     api 'androidx.appcompat:appcompat:1.3.0-alpha02'
 
     // 防止Retrofit内存泄露
-    api 'com.trello.rxlifecycle3:rxlifecycle:3.1.0'
-    api 'com.trello.rxlifecycle3:rxlifecycle-android:3.1.0'
-    api 'com.trello.rxlifecycle3:rxlifecycle-components:3.1.0'
+    //api 'com.trello.rxlifecycle3:rxlifecycle:3.1.0'
+    //api 'com.trello.rxlifecycle3:rxlifecycle-android:3.1.0'
+    //api 'com.trello.rxlifecycle3:rxlifecycle-components:3.1.0'
+
+    //rxjava2 支持在主线程回调 https://github.com/liujingxing/rxjava-RxLife
+    api 'com.ljx.rxlife2:rxlife-rxjava:2.0.0'
 
     // 带行号的Log
     api 'com.github.zhaokaiqiang.klog:library:1.6.0'
 
     // 查看内存泄露
-    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.1'
+    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
 
     // 漂亮的TabLayout
     api 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'

+ 2 - 7
mvp/src/main/java/com/miekir/mvp/model/BaseModel.java

@@ -3,7 +3,6 @@ package com.miekir.mvp.model;
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.presenter.BasePresenter;
 
-import io.reactivex.disposables.CompositeDisposable;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -19,17 +18,13 @@ public abstract class BaseModel {
         mPresenter = presenter;
     }
 
-    protected CompositeDisposable mProgressDisposableList = new CompositeDisposable();
-    protected CompositeDisposable mBackDisposableList = new CompositeDisposable();
-
+    // todo
     public void onProgressTaskCancel() {
-        mProgressDisposableList.dispose();
-        mProgressDisposableList = new CompositeDisposable();
         LogTool.d(getClass().getName(), "progress model cancel");
     }
 
+    // todo
     public void onBackTaskCancel() {
-        mBackDisposableList.dispose();
         mPresenter = null;
         LogTool.d(getClass().getName(), "back model cancel");
     }

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

@@ -1,9 +1,14 @@
 package com.miekir.mvp.presenter;
 
-import androidx.lifecycle.ViewModel;
+import android.app.Application;
+
+import androidx.annotation.NonNull;
 
 import com.miekir.mvp.model.BaseModel;
 import com.miekir.mvp.view.IView;
+import com.rxjava.rxlife.ScopeViewModel;
+
+import org.jetbrains.annotations.NotNull;
 
 import java.lang.ref.WeakReference;
 import java.util.List;
@@ -11,7 +16,6 @@ import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Consumer;
 
-import io.reactivex.disposables.CompositeDisposable;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -24,16 +28,8 @@ import io.reactivex.disposables.CompositeDisposable;
  * View <-(weak) Presenter <-(weak) Model <-(weak) Repository
 
  */
-public abstract class BasePresenter<V extends IView> extends ViewModel {
+public abstract class BasePresenter<V extends IView> extends ScopeViewModel {
     private WeakReference<V> mViewReference;
-    /**
-     * 有加载框的可取消任务,完成之后,会自动移除
-     */
-    protected CompositeDisposable mProgressDisposableList = new CompositeDisposable();
-    /**
-     * 后台没有加载框的可取消任务,完成之后,会自动移除
-     */
-    protected CompositeDisposable mBackDisposableList = new CompositeDisposable();
     /**
      * 有加载框的可取消任务, for model
      */
@@ -43,7 +39,8 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
      */
     private List<BaseModel> mBackModelList = new CopyOnWriteArrayList<>();
 
-    public BasePresenter() {
+    public BasePresenter(@NonNull @NotNull Application application) {
+        super(application);
         PresenterHelper.initModelList(mProgressModelList, mBackModelList, this);
         onInit();
     }
@@ -80,7 +77,6 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
      * 没有加载框的任务被取消
      */
     private void onBackTaskCancel() {
-        mBackDisposableList.dispose();
         for (BaseModel model : mBackModelList) {
             model.onProgressTaskCancel();
         }
@@ -91,8 +87,7 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
      * 界面还存在,可见任务被取消,响应加载框的取消
      */
     public void onProgressTaskCancel() {
-        mProgressDisposableList.dispose();
-        mProgressDisposableList = new CompositeDisposable();
+
 
         for (BaseModel model : mProgressModelList) {
             model.onProgressTaskCancel();

+ 28 - 27
network/build.gradle

@@ -15,38 +15,39 @@ android {
     }
 
     buildTypes {
-        release {
+        debug {
             minifyEnabled false
-            buildConfigField("boolean", "IS_DEBUG_MODE", "false")
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField("boolean", "IS_DEBUG", 'true')
         }
-
-        debug {
+        release {
             minifyEnabled false
-            buildConfigField("boolean", "IS_DEBUG_MODE", "true")
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField("boolean", "IS_DEBUG", 'false')
         }
     }
 
     // 开发与发布的URL
-    flavorDimensions "url"
-    productFlavors {
-        dev {
-            // 开发环境宿舍服务器
-            buildConfigField("String", "BASE_URL", '"http://192.168.0.190:8080/"')
-            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://192.168.0.190/"')
-        }
-
-        rel {
-            // 正式上线
-            buildConfigField("String", "BASE_URL", '"http://app.icsmabc.cyou:8856/"')
-            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://icsmabc.cyou/eden/images/"')
-        }
-
-        company {
-            // 开发2
-            buildConfigField("String", "BASE_URL", '"http://10.16.0.153:8080/"')
-            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://10.16.0.153/"')
-        }
-    }
+//    flavorDimensions "url"
+//    productFlavors {
+//        dev {
+//            // 开发环境宿舍服务器
+//            buildConfigField("String", "BASE_URL", '"http://192.168.0.190:8080/"')
+//            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://192.168.0.190/"')
+//        }
+//
+//        rel {
+//            // 正式上线
+//            buildConfigField("String", "BASE_URL", '"http://app.icsmabc.cyou:8856/"')
+//            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://icsmabc.cyou/eden/images/"')
+//        }
+//
+//        company {
+//            // 开发2
+//            buildConfigField("String", "BASE_URL", '"http://10.16.0.153:8080/"')
+//            buildConfigField("String", "HOST_STATIC_RESOURCE_IMAGE", '"http://10.16.0.153/"')
+//        }
+//    }
 }
 
 dependencies {
@@ -77,6 +78,6 @@ dependencies {
     api "com.squareup.okhttp3:logging-interceptor:3.6.0"
 
     // 调试过程中可以在通知栏查看详细的网络请求
-    debugImplementation 'com.readystatesoftware.chuck:library:1.1.0'
-    releaseImplementation 'com.readystatesoftware.chuck:library-no-op:1.1.0'
+    debugApi 'com.readystatesoftware.chuck:library:1.1.0'
+    releaseApi 'com.readystatesoftware.chuck:library-no-op:1.1.0'
 }