![](/img/trans.png)
[英]Android: Clear all backstack activities and then finish current activity
[英]How to finish all activities in the stack and run new activity with no backstack history?
我的Android应用程序中有下一个导航: login_activity
> main_activity
> item_details_activity
用户登录后, login_activity
完成main_activity
显示项目(从服务器接收)。 当用户单击main_activity
ListView中的项目时,将显示新的item_details_activity
,但main_activity
尚未完成(为了使用户按下BACK按钮并返回main_activity
)。
问题是会话可能会过期(登录时收到令牌),并且我在item_details_activity
有服务器异常。 然后,我必须完成堆栈中的所有活动活动( item_details_activity
和main_activity
)并运行没有历史记录的login_activity
。
如何完成堆栈中的所有活动?
恕我直言,设置全局session_expired
标志并在堆栈中所有可能的活动中检查它不是一个好主意。
您可以尝试:
Intent in = new Intent(getBaseContext(), HomeActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(in);
一旦活动超出堆栈,它们将被android runtime自动删除。
检查main_activity
onResume()
的会话标志,如果它是session_expired
则使用intent.flag_activity_clear_top
标志启动startActivity login_activity
。
要么
您可以startActivity
login_activity
与intent.flag_activity_clear_top
在OnBackpressed()
在item_details_activity
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
在某些情况下不起作用。 最好的方法是使用BroadcastReceiver
。 您可以在活动开始时进行注册,并在活动破坏时取消注册。 如果要清除所有之间的时间,只需广播消息即可清除所有已注册的活动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.