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

新手上路,请多包涵

是否可以在堆栈上启动一个活动,清除它之前的整个历史记录?

情况

我有一个活动堆栈,可以是 A->B->C 或 B->C(屏幕 A 选择用户令牌,但许多用户只有一个令牌)。

在屏幕 C 中,用户 可能会 采取使屏幕 B 无效的操作,因此应用程序希望将他们带到屏幕 A,而不管它是否已经在堆栈中。然后,屏幕 A 应该是我的应用程序堆栈中的唯一项目。

笔记

还有许多其他类似的问题,但我还没有找到任何可以回答这个确切问题的东西。我尝试调用 getParent().finish() - 这总是会导致空指针异常。 FLAG_ACTIVITY_CLEAR_TOP 仅当活动已经在堆栈上时才有效。

原文由 Casebash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
2 个回答

在 API 级别 11 中,为此添加了一个新的 Intent 标志: Intent.FLAG_ACTIVITY_CLEAR_TASK

只是为了澄清,使用这个:

爪哇

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

科特林

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

不幸的是,对于 API lvl <= 10,我还没有找到一个干净的解决方案。 “DontHackAndroidLikeThis”解决方案 确实是纯粹的骇客。你不应该那样做。 :)

编辑: 根据@ Ben Pearson 的评论,对于 API <=10,现在可以使用 IntentCompat 类。可以使用 IntentCompat.FLAG_ACTIVITY_CLEAR_TASK 标志来清除任务。所以你也可以支持 pre API level 11。

原文由 Akos Cz 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 Java 中:-

  startActivity(new Intent(getApplicationContext(),ChooseServiceActivity.class)
                        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK));

原文由 Safal Bhatia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题