Преглед на файлове

界面已经销毁,任务不用继续执行

詹子聪 преди 5 години
родител
ревизия
08f7f20384
променени са 2 файла, в които са добавени 21 реда и са изтрити 5 реда
  1. 19 4
      app/src/main/java/com/miekir/newmvp/LoadingAspect.java
  2. 2 1
      mvp/src/main/java/com/miekir/mvp/presenter/BaseViewModel.java

+ 19 - 4
app/src/main/java/com/miekir/newmvp/LoadingAspect.java

@@ -13,6 +13,7 @@ import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
 /**
@@ -26,13 +27,26 @@ public class LoadingAspect {
     @Pointcut("execution(* *(..)) && @annotation(com.miekir.mvp.base.NeedLoading)")
     public void timeTask() {}
 
-    /*@Around("timeTask()")
+    @Around("timeTask()")
     public void onTimeTaskAround(ProceedingJoinPoint joinPoint) throws Throwable {
-        joinPoint.proceed();
-    }*/
+        Object targetObject  = joinPoint.getTarget();
+        Field liveDataField = null;
+        try {
+            liveDataField = targetObject.getClass().getField("liveData");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (liveDataField != null) {
+            //如果在Around中不调用joinPoint.proceed(),则@Before注解的方法不会调用,但是@After还是会调用。
+            joinPoint.proceed();
+            Log.e(TAG, "proceed....");
+        } else {
+            Log.e(TAG, "live data null....");
+        }
+    }
 
     @Before("timeTask()")
-    public void afterMethod(JoinPoint joinPoint){
+    public void beforeMethod(JoinPoint joinPoint){
         // 注入加载框
         Object targetObject  = joinPoint.getTarget();
         try {
@@ -47,6 +61,7 @@ public class LoadingAspect {
                 }
             }
             showDialogMethod.invoke(targetObject, message);*/
+
             showDialogMethod.invoke(targetObject);
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 1
mvp/src/main/java/com/miekir/mvp/presenter/BaseViewModel.java

@@ -20,8 +20,9 @@ public abstract class BaseViewModel extends ViewModel {
     /**
      * ViewModel的生命周期和Activity保持一致;在onStart()、onResume()、onPause()时调用LiveData的setValue才会通知观察者
      * liveData在ViewModel(Presenter)创建,然后提供方法给Activity获取,方便取消观察
+     * 由于使用了AspectJ,这个变量名和属性不能改动,否则AspectJ会拿不到值
      */
-    private MutableLiveData<DataResult> liveData = new MutableLiveData<DataResult>();
+    public MutableLiveData<DataResult> liveData = new MutableLiveData<DataResult>();
 
     public MutableLiveData<DataResult> getLiveData() {
         return liveData;