Skip to content

Commit

Permalink
6.9.8 update
Browse files Browse the repository at this point in the history
- 新增队列事物执行器 QueueWorks,可通过 `.addWork(BaseActivityClass, QueueWorks)` 来为未启动的 BaseActivity 添加待执行事件,或者对已启动的 BaseActivity 添加依次执行事件,事件会在 BaseActivity 处于前台时执行;
添加事件也可以通过 `BaseActivity.runWork(BaseActivityClass, QueueWorks)` 来添加。
此外请注意,每执行完成一个事件后需要调用 QueueWorks 中的方法 `finishWork()` 才可以执行接下来的事件。
- 完善 QueueWorks 逻辑,提供 DEBUGMODE 日志开关以及 `cleanWorking(activityClass)` 清理执行中任务的逻辑。
  • Loading branch information
kongzue committed Mar 19, 2024
1 parent 399f30a commit baae50c
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
}

/**
* 退出应用程序
*/
Expand Down Expand Up @@ -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();
}
}

/**
Expand Down Expand Up @@ -315,4 +333,10 @@ private static Application getApplicationContext() {
}
return null;
}

List<Runnable> whenAllActivityDestroyedRunnable = new ArrayList<Runnable>();

public void addWhenAllActivityDestroyedRunnable(Runnable runnable){
whenAllActivityDestroyedRunnable.add(runnable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@
*/
public abstract class QueueWorks<A extends BaseActivity> {

public static boolean DEBUGMODE;

private static Map<String, List<QueueWorks>> workBag = new HashMap<>();
private static Set<String> working = new HashSet<>();

public static void addWork(Class<? extends BaseActivity> clazz, QueueWorks works) {
log("addWork: " + clazz.getSimpleName() + " work=" + works);
List<QueueWorks> worksList = workBag.get(clazz.getName());
if (worksList == null) {
worksList = new ArrayList<>();
Expand All @@ -34,23 +37,27 @@ public static void addWork(Class<? extends BaseActivity> clazz, QueueWorks works
}

public static void doNextWork(Class<? extends BaseActivity> clazz) {
log("doNextWork: " + clazz.getSimpleName());
BaseActivity activity = AppManager.getInstance().getActivityInstance(clazz);
List<QueueWorks> 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() {
works.callRun(activity);
}
});
} else {
log("doNextWork: run: " + clazz.getSimpleName() + " ,activity isNotActive, runOnResume works=" + works);
activity.runOnResume(new Runnable() {
@Override
public void run() {