Android完全退出程序Intent.FLAG_ACTIVITY_CLEAR_TASK无效

在启动activity时设置Intent.FLAG_ACTIVITY_CLEAR_TASK时,要求要启动的activity必须在原来的堆栈中存在

例如 B→A→C→D在D跳到A时要像将B C D 结束必须这四个在同一个堆栈中,也就是说 如果 A跳转调用了finish,D在跳回去时A已经在栈中,此时是无效的。

解决方法  设置为intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`Intent.FLAG_ACTIVITY_NEW_TASK` 和 `Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED` 是两个标志位,用于指示启动 Activity 的行为。它们通常与 `Intent` 的 `setFlags()` 方法一起使用。 `Intent.FLAG_ACTIVITY_NEW_TASK` 的作用是告诉系统创建一个新的任务栈来启动目标 Activity,而不是在当前任务栈中启动它。如果目标 Activity 已经在系统中运行,它将被移动到前台,并成为新任务栈中的根 Activity。这个标志位通常用于启动一个独立的 Activity,例如启动一个全新的应用程序。 `Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED` 的作用是告诉系统如果目标 Activity 已经在前台,并且它所在的任务栈已经在后台,那么将该任务栈移到前台,并清空栈中所有 Activity 的状态。如果目标 Activity 不在前台,或者它所在的任务栈已经在前台,那么这个标志位不起作用。这个标志位通常用于判断用户是否在使用当前任务栈中的 Activity,如果不是,那么就将该任务栈移到前台,并清空栈中的状态。 这两个标志位通常一起使用,以确保目标 Activity 能够以正确的方式启动。例如,如果你想要启动一个新的 Activity,并将它放在一个新的任务栈中,你可以这样使用: ``` Intent intent = new Intent(this, TargetActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); ``` 在这个示例中,我们使用 `Intent.FLAG_ACTIVITY_NEW_TASK` 标志位创建一个新的任务栈,并使用 `Intent.FLAG_ACTIVITY_CLEAR_TASK` 标志位清空该任务栈中的所有 Activity。这样,我们就能够启动一个新的 Activity,并确保它位于一个独立的任务栈中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值