如何获得暂停并进入后台的活动?

问题描述 投票:0回答:2

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

单击通知时,它应该打开先前打开的最后一个活动,即(BActivity)。

问题 如何打开上一个特定的暂停活动?

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

android android-intent android-activity android-lifecycle
2个回答
1
投票

如果我的理解正确,您是否想在收到推送通知后将应用恢复到前台?在这种情况下,请使用以下代码:

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


0
投票

您可以尝试通过将活动生命周期回调添加到应用程序中来进行尝试。并判断当前已暂停或已恢复的活动的活动类型,等等。示例代码:

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,则应用为背景,否则为前景。您可以通过提供的回调方法来判断活动类型。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.