如何关闭除第一个之外的所有以前的 Android 活动?
Posted
技术标签:
【中文标题】如何关闭除第一个之外的所有以前的 Android 活动?【英文标题】:How to close all previous Android actvitities except the first one? 【发布时间】:2021-12-12 13:37:23 【问题描述】:考虑一个假设的电子银行应用程序,其流程如下:
HomeActivity -> CurrencyConverterActivity -> PickContactActivity -> InputDataTransferActivity -> TransferReviewActivity -> TransferConfirmationActivity
所有活动(HomeActivity 除外)都使用通常的startActivity()
调用,而没有finish()
。
这是有意的,因此用户可以查看前一个屏幕上的输入。但是一旦你到达 TransferConfirmationActivity 并按回,我想回到 HomeActivity(其他活动被杀死)。
如何做到这一点?
【问题讨论】:
使用 startActivityForResult() 启动所有活动。在 TransferConfirmationActivity 中,将 putExtra 添加到您用于 finish() 的意图中,表明接收活动也必须关闭。 【参考方案1】:我认为您可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP
标志来实现这一点。
据android Documentation约FLAG_ACTIVITY_CLEAR_TOP
如果设置,并且正在启动的活动已经在 当前任务,而不是启动该任务的新实例 活动,除此之外的所有其他活动都将关闭,并且 此 Intent 将作为 新意图。
val intent = Intent(this, HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
【讨论】:
【参考方案2】:启动 HomeActivity 并在 Intent 中添加标志
Intent intent = new Intent(activity, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
【讨论】:
【参考方案3】:在TransferConfirmationActivity
中覆盖onBackPressed()
并返回到HomeActivity
,如下所示:
Intent intent = new Intent(this, TransferConfirmationActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
这会将用户返回到HomeActivity
的现有实例,同时从堆栈中删除所有其他活动。
如果您希望创建 HomeActivity
的新实例并返回到该实例,只需删除标志 Intent.FLAG_ACTIVITY_SINGLE_TOP
。
【讨论】:
以上是关于如何关闭除第一个之外的所有以前的 Android 活动?的主要内容,如果未能解决你的问题,请参考以下文章