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

The situation

I have an activity stack that either goes A->B->C or B->C (screen A selects the users token, but many users only have a single token).

在屏幕C中,用户may执行一个使屏幕B无效的操作,因此应用程序希望将其带到屏幕A,而不管它是否已经在堆栈中.然后,屏幕A应该是我的应用程序中堆栈上的唯一项.

Notes

还有很多类似的问题,但我还没有找到任何能回答这个问题的答案.我try 调用getParent().finish()-这总是导致空指针异常.FLAG_ACTIVITY_CLEAR_TOP仅在活动已在堆栈上时有效.

推荐答案

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

为澄清起见,请使用以下内容:

Java

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

Kotlin

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

不幸的是,对于API lvl<;=我还没有找到一个干净的解决方案.

Edit: 根据@Ben Pearson的 comments ,对于API<;=10,现在可以使用IntentCompat类.可以使用IntentCompat.FLAG_ACTIVITY_CLEAR_TASK标志清除任务.因此您也可以支持API级别11之前的版本.

Android相关问答推荐

如何自定义所选的NavigationBar项目?

约束布局:垂直链中的视图应将内容包裹到空间的1/3

NativeScript在`ns run android`上重复Kotlin类

在不增加父行宽度的情况下添加延迟行或可滚动行

我如何剪裁一个可由另一个合成的

更改Jetpack Compose中选定的选项卡底线 colored颜色

使用RecycleView和Diffutils时从列表中删除项目时出现问题

在 Compose 中,当用户持续向下滚动时,LazyColumn 不会显示新项目

闪屏 API 无法在 Android 12 上运行(API 31、32)

减少Compose中可滚动选项卡之间的间距

Android CompanionDeviceManager 永远找不到任何附近的蓝牙设备

使用 Dagger Hilt 获取接口的所有实例

无法通过 retrofit 解析对 kotlin 数据类的 xml 响应

协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

为 AlertDialog 的消息文本设置自定义字体

对话框中的内容不可见

在 Kotlin 客户端应用程序中发送 FCM 推送通知 - Firebase 云消息传递

如何在jetpack compose中创建自定义rememberState?

Google Play 控制台您的应用是否使用广告 ID?

Android Studio,Db 连接错误:发生异常情况导致驱动程序失败.请报告此异常