目录

Intent Flag 实现正确的登录后跳转

目录

在登录 Demo 的实现过程中发现,如果使用一般的 startActivity 方式调用新的活动,那么暗下 back 键就会返回原来登录界面,逻辑上发生了错误。想要解决这个问题要借助 Intent 的 flag 设置。

Intent 的功能相对比较复杂,其中 flag 可以实现对新活动的返回栈使用方式的设置。 要保证登录成功后跳转到新的活动界面,而且通常登录界面就不应存在,back 键也无法调用它,即需要清空原有的任务栈而后加入新的活动界面作为任务栈最底层。 这需要使用 flag 属性的 FLAG_ACTIVITY_CLEAR_TASK。查阅文档可以知道,这个属性必须配合 FLAG_ACTIVITY_NEW_TASK 使用。 所以启动新的活动的代码应为:

1
2
3
Intent intent = new Intent(context, NewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);

如果有的 app 的登录界面不是第一个活动,而且有其他复杂的功能,那么可能要用 FLAG_ACTIVITY_CLEAR_TOP 来代替 FLAG_ACTIVITY_CLEAR_TASK。这个属性的功能是清除任务栈中目标活动上层的所有活动(即目标活动成为顶层活动),然后把 Intent 实例传给旧的活动实例。这个属性也要配合 FLAG_ACTIVITY_NEW_TASK 使用。