Skip to content

Commit

Permalink
6.9.7 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()` 才可以执行接下来的事件。
  • Loading branch information
kongzue committed Mar 7, 2024
1 parent 0067fe8 commit 399f30a
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 3 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 135
versionName "6.9.6"
versionCode 136
versionName "6.9.7"
}
buildTypes {
release {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@
import android.widget.TextView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.kongzue.baseframework.BaseActivity;
import com.kongzue.baseframework.BaseApp;
import com.kongzue.baseframework.BaseFragment;
import com.kongzue.baseframework.interfaces.Layout;
import com.kongzue.baseframework.interfaces.OnClick;
import com.kongzue.baseframework.util.JumpParameter;
import com.kongzue.baseframework.util.OnJumpResponseListener;
import com.kongzue.baseframework.util.Preferences;
import com.kongzue.baseframework.util.QueueWorks;
import com.kongzue.baseframeworkdemo.App;
import com.kongzue.baseframeworkdemo.activity.DemoActivity;
import com.kongzue.baseframeworkdemo.R;
import com.kongzue.baseframeworkdemo.activity.JumpActivity;

/**
* @author: Kongzue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
import com.kongzue.baseframework.util.OnJumpResponseListener;
import com.kongzue.baseframework.util.OnPermissionResponseListener;
import com.kongzue.baseframework.util.ParameterCache;
import com.kongzue.baseframework.util.QueueWorks;
import com.kongzue.baseframework.util.swipeback.util.SwipeBackActivityBase;
import com.kongzue.baseframework.util.swipeback.util.SwipeBackActivityHelper;
import com.kongzue.baseframework.util.swipeback.util.SwipeBackLayout;
Expand Down Expand Up @@ -200,6 +201,8 @@ public void run() {
if (globalLifeCircleListener != null) {
globalLifeCircleListener.onCreate(me, me.getClass().getName());
}

QueueWorks.doNextWork(this.getClass());
}

private void guessLayoutResToSetContentView() {
Expand Down Expand Up @@ -1799,8 +1802,12 @@ public BaseActivity setDarkStatusAndNavBarTheme(boolean dark) {
return this;
}

public BaseActivity setTranslucentNavBarBackground(){
public BaseActivity setTranslucentNavBarBackground() {
setNavigationBarBackgroundRes(R.color.transparentNavigationBackgroundColor);
return this;
}

public static void runWork(Class<? extends BaseActivity> runOnWhatActivity, QueueWorks works) {
QueueWorks.addWork(runOnWhatActivity, works);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.kongzue.baseframework.util;

import android.util.Log;

import com.kongzue.baseframework.BaseActivity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* Author: @Kongzue
* Github: https://github.com/kongzue/
* Homepage: http://kongzue.com/
* Mail: myzcxhh@live.cn
* CreateTime: 2024/3/7 03:15
*/
public abstract class QueueWorks<A extends BaseActivity> {

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) {
List<QueueWorks> worksList = workBag.get(clazz.getName());
if (worksList == null) {
worksList = new ArrayList<>();
}
worksList.add(works);
workBag.put(clazz.getName(), worksList);
doNextWork(clazz);
}

public static void doNextWork(Class<? extends BaseActivity> clazz) {
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())) {
return;
}
working.add(clazz.getName());
QueueWorks works = worksList.get(0);
worksList.remove(works);
if (activity.isActive) {
activity.runOnMain(new Runnable() {
@Override
public void run() {
works.callRun(activity);
}
});
} else {
activity.runOnResume(new Runnable() {
@Override
public void run() {
works.callRun(activity);
}
});
}
}
}

Class<? extends BaseActivity> runOnClass;

private void callRun(A activity) {
this.runOnClass = activity.getClass();
run(activity);
}

public abstract void run(A me);

public void finishWork() {
working.remove(runOnClass.getName());
doNextWork(runOnClass);
}

Object data;

public <D> D getData() {
return (D) data;
}

public QueueWorks<A> setData(Object data) {
this.data = data;
return this;
}
}

0 comments on commit 399f30a

Please sign in to comment.