在项目中要实现用户退出登录的功能,当用户点击退出登录按钮后,跳转到登录页面的 Activity ,直接用 startActivity() 跳转,点击返回键后仍会回到退出前的 Activity 。
如果使用下面这句代码给 intent 设置 Flag
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
在第一次登录时有效,因为用户第一次登录时会在登录页面输入账号密码进行登录,然后跳转到主页面。这样在退出登录时,会回到之前经过的登录 Activity ,任务栈会将登录页面
Activity 之上的 Activity 全部清空,按返回键不会回到主页面。
但是在用户已经登录过之后,由于账号密码已经保存,不需要再次输入进行登录,不会经过登录 Activity , 这样在退出登录后按返回键仍会返回到主页面。
使用 FLAG_ACTIVITY_CLEAR_TASK , FLAG_ACTIVITY_NEW_TASK 即可解决。代码如下:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
注意是 addFlags() 不是 setFlags()
谷歌官方文档提到, Intent.FLAG_ACTIVITY_CLEAR_TASK 要起作用,必须和 Intent.FLAG_ACTIVITY_NEW_TASK 配合使用。
这两个 Flag 可以将原有任务栈清空,并将 intent 的目标 Activity 作为任务栈的根 Activity 。任务栈的 Id 没有变,如下所示,也就是说,并没有开辟新的任务栈。
I/得到TaskId: 19959
I/得到TaskId: 19959