diff --git a/app/build.gradle b/app/build.gradle index def0aed..41419c8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "com.kongzue.baseframeworkdemo" minSdkVersion 15 targetSdkVersion 30 - versionCode 136 - versionName "6.9.7" + versionCode 137 + versionName "6.9.8" } buildTypes { release { diff --git a/baseframework/src/main/java/com/kongzue/baseframework/util/AppManager.java b/baseframework/src/main/java/com/kongzue/baseframework/util/AppManager.java index 42fd765..9a6f551 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/util/AppManager.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/util/AppManager.java @@ -10,6 +10,7 @@ import java.lang.ref.WeakReference; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; @@ -139,6 +140,17 @@ public void killAllActivity() { } } + public void killAllActivity(Runnable whenAllActivityDestroyedRunnable) { + addWhenAllActivityDestroyedRunnable(whenAllActivityDestroyedRunnable); + if (activityStack != null) { + while (!activityStack.empty()) { + BaseActivity activity = currentActivity(); + killActivity(activity); + } + activityStack.clear(); + } + } + /** * 退出应用程序 */ @@ -172,6 +184,12 @@ public void deleteActivity(BaseActivity activity) { } catch (Exception e) { } + if (activityStack!=null && activityStack.isEmpty()){ + for (Runnable runnable :whenAllActivityDestroyedRunnable){ + runnable.run(); + } + whenAllActivityDestroyedRunnable.clear(); + } } /** @@ -315,4 +333,10 @@ private static Application getApplicationContext() { } return null; } + + List whenAllActivityDestroyedRunnable = new ArrayList(); + + public void addWhenAllActivityDestroyedRunnable(Runnable runnable){ + whenAllActivityDestroyedRunnable.add(runnable); + } } \ No newline at end of file diff --git a/baseframework/src/main/java/com/kongzue/baseframework/util/QueueWorks.java b/baseframework/src/main/java/com/kongzue/baseframework/util/QueueWorks.java index 0259d72..122cdad 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/util/QueueWorks.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/util/QueueWorks.java @@ -20,10 +20,13 @@ */ public abstract class QueueWorks { + public static boolean DEBUGMODE; + private static Map> workBag = new HashMap<>(); private static Set working = new HashSet<>(); public static void addWork(Class clazz, QueueWorks works) { + log("addWork: " + clazz.getSimpleName() + " work=" + works); List worksList = workBag.get(clazz.getName()); if (worksList == null) { worksList = new ArrayList<>(); @@ -34,16 +37,19 @@ public static void addWork(Class clazz, QueueWorks works } public static void doNextWork(Class clazz) { + log("doNextWork: " + clazz.getSimpleName()); BaseActivity activity = AppManager.getInstance().getActivityInstance(clazz); List worksList = workBag.get(clazz.getName()); if (activity != null && worksList != null && !worksList.isEmpty()) { if (working.contains(clazz.getName())) { + log("doNextWork: return! " + clazz.getSimpleName() + " is working!"); return; } working.add(clazz.getName()); QueueWorks works = worksList.get(0); worksList.remove(works); if (activity.isActive) { + log("doNextWork: run: " + clazz.getSimpleName() + " ,activity isActive, works=" + works); activity.runOnMain(new Runnable() { @Override public void run() { @@ -51,6 +57,7 @@ public void run() { } }); } else { + log("doNextWork: run: " + clazz.getSimpleName() + " ,activity isNotActive, runOnResume works=" + works); activity.runOnResume(new Runnable() { @Override public void run() { @@ -61,6 +68,10 @@ public void run() { } } + public static void cleanWorking(Class clazz){ + working.remove(clazz.getName()); + } + Class runOnClass; private void callRun(A activity) { @@ -85,4 +96,10 @@ public QueueWorks setData(Object data) { this.data = data; return this; } + + private static void log(String s) { + if(DEBUGMODE){ + Log.w(">>>" ,"QueueWorks: " + s); + } + } }