android - 为什么有时当我按下后退按钮时, Activity 比应有的多?

标签 android android-fragments android-intent android-activity back-stack

我不知道如何表达这个问题。

我的应用程序有一个简单的 ViewPager,您单击其中一个页面 fragment 中的某个内容,它会将您带到另一个 Activity。按后退按钮,它会将您带回到 ViewPager。再按一次返回,它会关闭应用程序。

但是,有时当我在 ViewPager 上按返回键时,它会再次带我回到另一个 Activity,然后我按返回键它会带我回到 ViewPager,依此类推,直到应用程序最终关闭。换句话说,就像在后台堆栈中有 ViewPager 或其他 Activity 的备用剩余实例(我认为它被称为),但我不知道这是如何或为什么发生的。

我也不知道如何重现错误,这更令人沮丧。大部分时间它都按预期工作,但有时当我按下时,剩余的实例会突然出现。

我如何才能更好地保证当我按下另一个 Activity 上的后退按钮时,它会返回到 ViewPager,而当我按下 ViewPager 上的后退按钮时,它会关闭应用程序?

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home: //called when I press back button on the phone or the back-arrow on the toolbar
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

//and then usually that's all I have, but in one particular Activity, I do override the function:

@Override
public void onBackPressed() {
    if (some conditions are met) {
        finish();
        super.onBackPressed();
    }
    else {
        //display some error message
    }
}

以下是我启动 Activity 的方式:

public void launchSomeActivity() {
    Intent intent = new Intent(getActivity(), ActivityName.class);
    intent.putExtra( etc etc etc );
    startActivityForResult(intent, REQUEST_CODE);
}

最佳答案

您可能看到了一个长期存在的讨厌的 Android 错误。如果您第一次从 IDE 或安装程序启动您的应用程序,当您将应用程序置于后台并再次从主屏幕启动它时,Android 会创建您的根 Activity 的另一个实例。这将准确展示您所报告的行为。如果您通过在主页屏幕(或可用应用程序列表)中按应用程序图标来首次启动该应用程序,则不会出现该问题。

参见 Re-launch of Activity on Home button, but...only the first time

关于android - 为什么有时当我按下后退按钮时, Activity 比应有的多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40241939/

相关文章:

android - 使用 getAllResponseHeaders 获取 HTTP 响应 header

Android - setAdapter ViewPager 上的 NullPointerException

android - 从浏览器 url 方案启动应用程序

java - 如何捕获Android模拟器标题栏中的文本

android - 用于创建丰富/复杂界面的书籍、教程或资源 (android)

android - EditText 自定义字符串格式

java - android 从 fragment 调用 MainActivity 函数

android - 如何从 Fragment TextView 打开 URL?

java - 安卓 : Using Broadcasting Receiver

服务和操作之间的 Android 单例