Android:完成后按下后退按钮时上一个 activity returns()

Android: Previous activity returns on back button press after finish()

我有 2 个活动。第一个 activity 是 LogoActivity。 3 秒后我开始第二个 activity 也就是我的 MainActivity.

private void startCountDown(int duration, int interval) {
    CountDownTimer mCountDownTimer = new CountDownTimer(duration, interval) {
        @Override
        public void onTick(long millisUntilFinished) {
            // nothing
        }

        @Override
        public void onFinish() {
            startActivity(MainActivity.class);
            finish();
        }
    };

    mCountDownTimer.start();
}

startActivity(Class mClass) 是我创建的一种方法,只需提供 class 即可启动任何 activity。

现在我在 MainActivity。如果我通过按主页按钮退出并 return 返回,我会看到 MainActivity,但如果我从 MainActivity 按下后退按钮并从后台重新打开应用程序,LogoActivity 首先出现.

我不希望用户每次按 MainActivity 的后退按钮(来自 phone 的按钮,而不是 activity)并从后台恢复时看到 LogoActivity .

为什么我调用finish()会显示LogoActivity

因为使用“返回”按钮与“主页”按钮不同。请参阅 Android Activity 生命周期:http://developer.android.com/intl/es/reference/android/app/Activity.html

当您按下后退按钮时,MainActivity 的实例被销毁。

然后您再次回到此任务堆栈,徽标Activity 是您的默认值 Activity,因此系统会为您创建一个实例。

您可以将 MainActivity 设置为 manifest.xml

中的默认 Activity
<activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

并在 MainActivity 的 onCreate 方法中启动 LogoActivity 这样用户将首先看到 LogoActivity。

3 秒后,完成 LogoActivity。

您必须为新 activity 使用 Intent。像这样。

startActivity(new Intent(LogoActivity.this, MainActivity.class));
finish();

仅代表startActivity(MainActivity.class)

尝试覆盖 onBackPressed() 方法

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

尝试控制 activity 的 onBackPressed() 方法。

为什么调用 finish() 后会显示 LogoActivity?

答案是—— 当您启动您的应用程序时,您的系统会检查应用程序的 ManifestFile 以获取一个 activity 其 Intent-filter 操作和类别设置为 "android.intent.action.MAIN" 和 "android.intent.category.LAUNCHER" .

此 activity 是您应用的启动器(第一个)activity。 (我认为,在您的情况下是 LogoActivty)。

当您启动您的应用程序时 "Android system" 在您的 Activity 中添加此 activity stack.As 您启动其他 activity 并将其添加到顶部Activity 个堆栈。

完成 activity 后,它将从 Activity 堆栈中移除。

每当您启动您的应用程序时 "Android system" 跟踪 Activity 堆栈到达顶部 activty.And 从该应用程序启动您的应用程序。

如果发现 Activity 堆栈为空,系统将使用您应用的启动器启动您的应用Activity。

在你的情况下,你完成了两个 activities.Thus 你的 Activity 堆栈变空,它以 LogoActivity.

启动你的应用程序

解决方案

覆盖 MainActivity 中的 onBackPress 方法并且不调用 finish。但在这种情况下,您的 Activity 不会关闭 onbackPress。

或者制作您的主要Activity 启动器activity

您可以在清单中使用 activity 属性来实现相同的目的。

"android:finishOnTaskLaunch"

更多请访问http://developer.android.com/guide/topics/manifest/activity-element.html

始终使用intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);