From d83d46034281bf693e233c8924c6dc31c178db46 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 27 Mar 2025 19:06:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=88=B0=20=5FGlobalApplicat?= =?UTF-8?q?ion=20=E5=AE=9E=E4=BE=8B=E5=8C=96=E6=AC=A1=E6=95=B0=E4=B8=8E?= =?UTF-8?q?=E7=8E=B0=E6=9C=89=E5=AE=9E=E4=BE=8B=E9=97=AE=E9=A2=98...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appbase/build.properties | 4 +- appbase/src/main/AndroidManifest.xml | 3 +- libappbase/build.properties | 4 +- libappbase/src/main/AndroidManifest.xml | 7 +++- .../studio/libappbase/GlobalApplication.java | 41 +++++++++++-------- .../winboll/MyActivityLifecycleCallbacks.java | 20 +++++---- .../winboll/WinBollActivityManager.java | 15 ++++--- 7 files changed, 57 insertions(+), 37 deletions(-) diff --git a/appbase/build.properties b/appbase/build.properties index fb4a17b..4469af4 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Mar 27 06:34:28 GMT 2025 +#Thu Mar 27 10:59:31 GMT 2025 stageCount=1 libraryProject=libappbase baseVersion=15.1 publishVersion=15.1.0 -buildCount=116 +buildCount=130 baseBetaVersion=15.1.1 diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml index 26bddb9..a0b2202 100644 --- a/appbase/src/main/AndroidManifest.xml +++ b/appbase/src/main/AndroidManifest.xml @@ -8,7 +8,8 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/MyAPPBaseTheme" - android:resizeableActivity="true"> + android:resizeableActivity="true" + android:process=":App"> + android:launchMode="singleInstance" + android:process=":GlobalCrashActivity"/> + android:exported="true" + android:launchMode="singleInstance" + android:process=":LogActivity"> diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java index 0301271..c084d46 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java @@ -27,8 +27,7 @@ public class GlobalApplication extends Application { volatile static GlobalApplication _GlobalApplication; // 是否处于调试状态 volatile static boolean isDebuging = false; - volatile static WinBollActivityManager _WinBollActivityManager; - volatile static MyActivityLifecycleCallbacks _MyActivityLifecycleCallbacks; + MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks; public static void setIsDebuging(boolean isDebuging) { if (_GlobalApplication != null) { @@ -44,13 +43,9 @@ public class GlobalApplication extends Application { // editor.apply(); } } - - public static WinBollActivityManager getWinBollActivityManager() { - return _WinBollActivityManager; - } - - public static MyActivityLifecycleCallbacks getMyActivityLifecycleCallbacks() { - return _MyActivityLifecycleCallbacks; + + public static GlobalApplication getInstance() { + return _GlobalApplication; } static String getAPPBaseModelFilePath() { @@ -73,7 +68,17 @@ public class GlobalApplication extends Application { @Override public void onCreate() { super.onCreate(); - _GlobalApplication = this; + + // _GlobalApplication 取值调试部分 + // + boolean is_GlobalApplicationNull = false; + if (_GlobalApplication == null) { + is_GlobalApplicationNull = true; + _GlobalApplication = this; + } else { + is_GlobalApplicationNull = false; + _GlobalApplication = this; + } // 设置应用调试标志 APPBaseModel appBaseModel = APPBaseModel.loadBeanFromFile(getAPPBaseModelFilePath(), APPBaseModel.class); @@ -95,20 +100,24 @@ public class GlobalApplication extends Application { // 初始化 Toast 框架 ToastUtils.init(this); - _WinBollActivityManager = WinBollActivityManager.getInstance(this); - - getWinBollActivityManager().setWinBollUI_TYPE(WinBollActivityManager.WinBollUI_TYPE.Service); + // _GlobalApplication 取值调试部分 + // + LogUtils.d(TAG, String.format("is_GlobalApplicationNull is %s", is_GlobalApplicationNull)); + + WinBollActivityManager.getInstance(_GlobalApplication); + WinBollActivityManager.getInstance(_GlobalApplication).setWinBollUI_TYPE(WinBollActivityManager.WinBollUI_TYPE.Service); // 注册回调 - _MyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks(getWinBollActivityManager()); - registerActivityLifecycleCallbacks(getMyActivityLifecycleCallbacks()); + mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks(); + registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks); } @Override public void onTerminate() { super.onTerminate(); + _GlobalApplication = null; // 注销回调(非必须,但建议释放资源) - unregisterActivityLifecycleCallbacks(getMyActivityLifecycleCallbacks()); + unregisterActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks); } public static String getAppName(Context context) { diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java index 2c3ca1f..d634d08 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java @@ -6,22 +6,26 @@ package cc.winboll.studio.libappbase.winboll; */ import android.app.Activity; import android.app.Application; -import android.content.Context; import android.content.Intent; import android.os.Bundle; +import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.utils.ToastUtils; +import cc.winboll.studio.libappbase.utils.ToastUtils; +import cc.winboll.studio.libappbase.winboll.IWinBollActivity; public class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks { public static final String TAG = "MyActivityLifecycleCallbacks"; - WinBollActivityManager mWinBollActivityManager; - + public String mInfo = ""; - public MyActivityLifecycleCallbacks(WinBollActivityManager winBollActivityManager) { - mWinBollActivityManager = winBollActivityManager; + public MyActivityLifecycleCallbacks() { + + } + + WinBollActivityManager getWinBollActivityManager() { + return WinBollActivityManager.getInstance(GlobalApplication.getInstance()); } void createActivityeInfo(Activity activity) { @@ -60,7 +64,7 @@ public class MyActivityLifecycleCallbacks implements Application.ActivityLifecyc //System.out.println(activity.getLocalClassName() + " was created"); LogUtils.d(TAG, activity.getLocalClassName() + " was created"); createActivityeInfo(activity); - mWinBollActivityManager.add((IWinBollActivity)activity); + getWinBollActivityManager().add((IWinBollActivity)activity); } @Override @@ -98,6 +102,6 @@ public class MyActivityLifecycleCallbacks implements Application.ActivityLifecyc public void onActivityDestroyed(Activity activity) { //System.out.println(activity.getLocalClassName() + " was destroyed"); LogUtils.d(TAG, activity.getLocalClassName() + " was destroyed"); - mWinBollActivityManager.registeRemove((IWinBollActivity)activity); + getWinBollActivityManager().registeRemove((IWinBollActivity)activity); } } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBollActivityManager.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBollActivityManager.java index 7b24a65..fc86be1 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBollActivityManager.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBollActivityManager.java @@ -33,9 +33,9 @@ public class WinBollActivityManager { Context mContext; MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks; - static WinBollActivityManager _mWinBollActivityManager; - static Map _mapIWinBollList; - IWinBollActivity firstIWinBollActivity; + static volatile WinBollActivityManager _mWinBollActivityManager; + static volatile Map _mapIWinBollList; + static volatile IWinBollActivity firstIWinBollActivity; public WinBollActivityManager(Context context) { mContext = context; @@ -208,6 +208,7 @@ public class WinBollActivityManager { public void resumeActivity(Context context, String tag) { LogUtils.d(TAG, "resumeActivity(Context context, String tag)"); T iWinBoll = (T)getIWinBoll(tag); + LogUtils.d(TAG, String.format("iWinBoll.getTag() %s", iWinBoll.getTag())); //LogUtils.d(TAG, "activity " + activity.getTag()); if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { resumeActivity(context, iWinBoll); @@ -219,15 +220,17 @@ public class WinBollActivityManager { // public void resumeActivity(Context context, T iWinBoll) { LogUtils.d(TAG, "resumeActivity(Context context, T iWinBoll)"); - ActivityManager am = (ActivityManager) iWinBoll.getActivity().getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); //返回启动它的根任务(home 或者 MainActivity) - Intent intent = new Intent(context, iWinBoll.getClass()); - TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); + Intent intent = new Intent(mContext, iWinBoll.getClass()); + TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext); stackBuilder.addNextIntentWithParentStack(intent); stackBuilder.startActivities(); //moveTaskToFront(YourTaskId, 0); //ToastUtils.show("resumeActivity am.moveTaskToFront"); + LogUtils.d(TAG, String.format("iWinBoll.getActivity().getTaskId() %d", iWinBoll.getActivity().getTaskId())); am.moveTaskToFront(iWinBoll.getActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); + LogUtils.d(TAG, "am.moveTaskToFront"); }