Compare commits

...

2 Commits

Author SHA1 Message Date
1e697bc12d 添加调试信息 2025-06-01 15:03:44 +08:00
d5a3c626b3 修复多窗口重复创建问题 2025-06-01 14:02:56 +08:00
8 changed files with 62 additions and 45 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sat May 31 13:31:02 GMT 2025
#Sun Jun 01 07:01:34 GMT 2025
stageCount=2
libraryProject=libappbase
baseVersion=15.8
publishVersion=15.8.1
buildCount=25
buildCount=45
baseBetaVersion=15.8.2

View File

@ -166,7 +166,7 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
}
public void onTestOpenNewActivity(View view) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(NewActivity.class);
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, NewActivity.class);
}
@Override

View File

@ -59,7 +59,7 @@ public class New2Activity extends WinBoLLActivity implements IWinBoLLActivity {
}
public void onNewActivity(View view) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(NewActivity.class);
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, NewActivity.class);
}

View File

@ -57,7 +57,7 @@ public class NewActivity extends WinBoLLActivity implements IWinBoLLActivity {
}
public void onNew2Activity(View view) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(New2Activity.class);
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, New2Activity.class);
}

View File

@ -8,8 +8,10 @@ package cc.winboll.studio.appbase.activities;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import cc.winboll.studio.appbase.MainActivity;
import cc.winboll.studio.appbase.R;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class WinBoLLActivity extends Activity implements IWinBoLLActivity {
@ -26,11 +28,19 @@ public class WinBoLLActivity extends Activity implements IWinBoLLActivity {
return TAG;
}
@Override
protected void onResume() {
super.onResume();
LogUtils.d(TAG, String.format("onResume %s", getTag()));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.item_log) {
GlobalApplication.getWinBoLLActivityManager().startLogActivity();
GlobalApplication.getWinBoLLActivityManager().startLogActivity(this);
return true;
} else if (item.getItemId() == R.id.item_home) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
return true;
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item_home"
android:title="HOME"
android:icon="@drawable/ic_winboll"/>
<item
android:id="@+id/item_log"
android:title="LOG"

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sat May 31 13:31:02 GMT 2025
#Sun Jun 01 07:01:34 GMT 2025
stageCount=2
libraryProject=libappbase
baseVersion=15.8
publishVersion=15.8.1
buildCount=25
buildCount=45
baseBetaVersion=15.8.2

View File

@ -57,7 +57,7 @@ public class WinBoLLActivityManager {
* 把Activity添加到管理中
*/
public <T extends IWinBoLLActivity> void add(T activity) {
if (isActive(activity.getTag())) {
if (isActivityActive(activity.getTag())) {
LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag()));
} else {
mActivityListMap.put(activity.getTag(), activity);
@ -71,21 +71,21 @@ public class WinBoLLActivityManager {
// activity: 不为 null
// intent.putExtra 函数 "tag" 参数为 activity.getTag()
//
public <T extends IWinBoLLActivity> void startWinBoLLActivity(Class<T> clazz) {
public <T extends IWinBoLLActivity> void startWinBoLLActivity(Context context, Class<T> clazz) {
// 如果窗口已存在就重启窗口
if (!resumeActivity(clazz)) {
// 新建一个任务窗口
Intent intent = new Intent(mContext, clazz);
Intent intent = new Intent(context, clazz);
//打开多任务窗口 flags
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
//intent.putExtra("tag", tag);
mContext.startActivity(intent);
context.startActivity(intent);
}
}
public <T extends IWinBoLLActivity> void startWinBoLLActivity(Intent intent, Class<T> clazz) {
public <T extends IWinBoLLActivity> void startWinBoLLActivity(Context context, Intent intent, Class<T> clazz) {
// 如果窗口已存在就重启窗口
if (!resumeActivity(clazz)) {
// 新建一个任务窗口
@ -95,60 +95,52 @@ public class WinBoLLActivityManager {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
//intent.putExtra("tag", tag);
mContext.startActivity(intent);
context.startActivity(intent);
}
}
public <T extends IWinBoLLActivity> void startLogActivity() {
public <T extends IWinBoLLActivity> void startLogActivity(Context context) {
// 如果窗口已存在就重启窗口
if (!resumeActivity(LogActivity.class)) {
// 新建一个任务窗口
Intent intent = new Intent(mContext, LogActivity.class);
//打开多任务窗口 flags
// Define the bounds.
//if (!resumeActivity(LogActivity.class)) {
// 新建一个任务窗口
Intent intent = new Intent(context, LogActivity.class);
//打开多任务窗口 flags
// Define the bounds.
// Rect bounds = new Rect(0, 0, 800, 200);
// // Set the bounds as an activity option.
// ActivityOptions options = ActivityOptions.makeBasic();
// options.setLaunchBounds(bounds);
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
//intent.putExtra(EXTRA_TAG, tag);
//intent.putExtra(EXTRA_TAG, tag);
//context.startActivity(intent, options.toBundle());
mContext.startActivity(intent);
}
//context.startActivity(intent, options.toBundle());
context.startActivity(intent);
//}
}
//
// 判断 tag 绑定的 Activity 是否已经创建
//
public boolean isActive(String tag) {
Activity activity = getActivityByTag(tag);
if (activity != null) {
//判断是否正在关闭
if (activity.isFinishing() || activity.isDestroyed()) {
return false;
} else {
return true;
}
}
return false;
public boolean isActivityActive(String tag) {
return mActivityListMap.get(tag) != null;
}
Activity getActivityByTag(String tag) {
return (mActivityListMap.get(tag) == null) ?null: mActivityListMap.get(tag).getActivity();
}
//
// 找到tag 绑定的 BaseActivity 通过 getTaskId() 移动到前台
//
public <T extends IWinBoLLActivity> boolean resumeActivity(Class<T> clazz) {
try {
Activity activity = getActivityByTag(clazz.newInstance().getTag());
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
if (activity != null) {
return resumeActivity(activity);
}
} catch (InstantiationException | IllegalAccessException e) {
@ -157,18 +149,29 @@ public class WinBoLLActivityManager {
return false;
}
//
// 找到tag 绑定的 BaseActivity 通过 getTaskId() 移动到前台
//
public <T extends IWinBoLLActivity> boolean resumeActivity(String tag) {
Activity activity = getActivityByTag(tag);
if (activity != null) {
return resumeActivity(activity);
}
return false;
}
//
// 找到tag 绑定的 BaseActivity 通过 getTaskId() 移动到前台
//
public <T extends IWinBoLLActivity> boolean resumeActivity(Activity activity) {
ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
//返回启动它的根任务home 或者 MainActivity
Intent intent = new Intent(mContext, activity.getClass());
TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
stackBuilder.addNextIntentWithParentStack(intent);
stackBuilder.startActivities();
//Intent intent = new Intent(mContext, activity.getClass());
//TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
//stackBuilder.addNextIntentWithParentStack(intent);
//stackBuilder.startActivities();
am.moveTaskToFront(activity.getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION);
ToastUtils.show("resumeActivity");
//ToastUtils.show("resumeActivity");
return true;
}