如何在Android中清除以前打开的活动

Posted

技术标签:

【中文标题】如何在Android中清除以前打开的活动【英文标题】:How to clear previously opened activity in Android 【发布时间】:2021-11-07 01:57:10 【问题描述】:
Intent intent = new Intent(MainActivity.this, Payment.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

开启优惠券活动申请优惠券:

Intent intent = new Intent(Payment.this, Coupon.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

来自带有更新数据的优惠券活动打开付款活动

Intent intent = new Intent(Coupon.this, Payment.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

问题是,当我在应用优惠券后点击支付活动的返回按钮时,它会再次打开之前打开的支付活动(不是主要活动)。

onBackPressed() 我不想做静态的(比如 Intent intent = new Intent(Payment.this, MainActivity.class); 也不想在支付活动中使用 finish(); 。

请帮忙。

【问题讨论】:

为什么不想从onBackPressed调用MainActivity或者调用finish()? 因为支付活动从多个​​活动中打开 如何开始您的应用程序?从 IDE (android Studio) 还是从安装程序? 请试试这个:启动Payment,然后Coupon,然后再次Payment。在按下 BACK 按钮之前,使用 adb shell dumpsys activity activities,找到您的应用的任务堆栈并将其粘贴到问题中。 【参考方案1】:

您可以在启动支付活动时使用FLAG_ACTIVITY_NO_HISTORY

见:https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_NO_HISTORY

【讨论】:

【参考方案2】:

这是startActivityForResult 的一个简单用例,不要因为意图标志和启动模式而变得复杂。

每当您打开您的活动Coupon 时,只需使用startActivityForResult 并在应用优惠券后将结果发送回之前的活动(成功/失败)或您想要的任何结果。然后,您可以根据在 onActivityResult() 中获得的结果更改 UI。 您可以关注How to manage startActivityForResult on Android 或来自文档Getting a result from an activity 的最新方式。

【讨论】:

以上是关于如何在Android中清除以前打开的活动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android Kotlin 中获取以前的活动

如何在 Android 中清除 ImageView?

如何清除 Android Stack 的活动?

如何清除特定活动的缓存?

Android:清除活动堆栈

如何在 Android 10 中打开活动(来电)