繁体   English   中英

如何完成堆栈中的所有活动并运行没有后退历史记录的新活动?

[英]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_activitymain_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_activityintent.flag_activity_clear_topOnBackpressed()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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM