98

我有 2 个活动:主要和列表。

从 Main 你可以打开 List;从列表中,您可以打开 Main。

我希望它不会让 List 的每次打开都保存到“历史”中。因此,从 Main 按下返回无法返回 List。

可能吗?

4

11 回答 11

169

开始列表时Activity,设置它的Intent标志,如下所示:

Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);

FLAG_ACTIVITY_NO_HISTORY标志防止新Activity的被添加到历史堆栈中。

注意:正如@Sam 指出的那样,您可以i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);改用。没有功能上的区别。

于 2012-09-10T19:56:55.500 回答
98

在清单文件中添加:

android:noHistory="true" 

到您不想保留在堆栈上的活动。

于 2012-09-10T20:00:25.683 回答
29

将新任务与清除一起使用。当其他选项没有时,这在我的情况下有效。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

清除整个历史堆栈并在 Android 上启动一个新活动

于 2014-06-18T19:22:55.777 回答
26

看来,如果您在打开另一个活动后立即在您的活动上调用完成(),则已完成的活动将从堆栈中删除。

例如:

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
于 2013-09-25T15:05:51.567 回答
11

在我的特殊情况下FLAG_ACTIVITY_NO_HISTORY没有工作。自己也没有工作,FLAG_ACTIVITY_NEW_TASK也没有FLAG_ACTIVITY_CLEAR_TASK工作。

然而FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK一起工作。

Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
于 2015-10-28T17:46:04.383 回答
5

迟到的答案,但为其他答案增加了一些深度。这一切都取决于您希望从该活动开始的其他活动发生什么

选项 1 - 仅此一项活动不应有调用活动的历史记录

然后做:

Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

选项 2 - 从该特定活动开始的所有活动都不应有历史记录

然后添加调用活动的清单:

android:noHistory="true" 

但是,如果您确实想在新活动中拥有历史记录,则必须手动删除该标志:

Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

希望清除其他答案:)

于 2018-07-04T10:28:15.500 回答
4

只是想在 Kotlin 中添加一种方法:

val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
于 2018-02-08T22:50:29.750 回答
2

如果活动已经在运行,请尝试 FLAG_ACTIVITY_CLEAR_TOP:

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2018-08-07T19:23:39.010 回答
1

将标志添加FLAG_ACTIVITY_NEW_TASK到您的Intent

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

于 2012-09-10T19:57:22.193 回答
0

情况1

使用这个标志

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

在这种情况下,活动过渡在开始活动之前没有顺利工作的空白白页

案例 2:

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

如果您的手机没有那么快,您会看到之前的活动正在关闭,我希望在大多数情况下,设备都会处理这个问题

于 2021-10-16T14:52:47.100 回答
-5

您不能覆盖特定活动上的后退按钮以停止“返回”功能吗?

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        return true;
    }
    return super.onKeyDown(keyCode, event);
}
于 2012-09-10T19:53:41.007 回答