如何让 Activity 暂停并进入后台?

How to get Activity that paused and goes in background?

我有一种情况,当我的应用程序进入后台(没有完全杀死!)并且最后存活时 activity 是 BActivity。在这种状态下。我收到推送通知。

单击通知时,它应该打开之前打开的最后一个 activity,即 (BActivity).

问题 如何打开最后一个特定的暂停activity?

是否有设置标志或清单配置之类的答案?

如果我没理解错的话,您想在收到推送通知后将您的应用程序带回前台吗?在这种情况下,请使用以下代码:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);

其中 MainActivity 是您在 AndroidManifest.xml 中指定的启动器 Activity

这应该会将您的应用置于其先前状态的前台(如果有的话),否则会启动 MainActivity。

有关解释,请参阅 here

您可以尝试将 activity 生命周期回调添加到您的应用程序。并判断当前暂停或恢复的activity类型activity等。示例代码:

public static void init(Application app) {
        app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {

            private int activityCount = 0;

            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                AppUtils.attachActivity(activity);
            }

            @Override
            public void onActivityStarted(Activity activity) {
                activityCount++;
                AppUtils.attachForeActivity(activity);
            }

            @Override
            public void onActivityResumed(Activity activity) {
                if (!isForeGround) {
                    isForeGround = true;
                    notifyForegroundChange(true);
                }
            }

            @Override
            public void onActivityPaused(Activity activity) {
                // no-op
            }

            @Override
            public void onActivityStopped(Activity activity) {
                AppUtils.detachForeActivity(activity);
                activityCount--;
                if (activityCount == 0) {
                    isForeGround = false;
                    notifyForegroundChange(false);
                    Log.i(TAG, "Activity foreground: " + System.currentTimeMillis());
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                // no-op
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                AppUtils.detachActivity(activity);
            }
        });
    }

这里我们使用 activityCount 字段来计算当前活跃的活动数。当它为 0 时,应用程序为后台,否则为前台。可以通过提供的回调方法判断activity类型

希望对您有所帮助!