我的Android应用程序中有下一个导航:
login_activity
- > main_activity
- > item_details_activity
login_activity
完成。
main_activity
显示项目(从服务器收到)。当用户点击main_activity
ListView中的项目时,会显示新的item_details_activity
,但main_activity
未完成(为了让用户按下BACK按钮并返回main_activity
)。< / p>
问题是会话可能会过期(登录时收到的令牌),我在item_details_activity
中有服务器异常。然后我必须完成堆栈中的所有活动活动(item_details_activity
和main_activity
)并运行没有历史记录的login_activity
。
如何完成堆叠中的所有活动活动?
恕我直言,设置全局session_expired
标志并在堆栈中所有可能的活动中检查它是不是一个好主意。
答案 0 :(得分:2)
您可以尝试:
Intent in = new Intent(getBaseContext(), HomeActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(in);
一旦活动不在堆栈中,它们将由android运行时自动删除。
答案 1 :(得分:0)
检查onResume()
main_activity
中的会话标记,如果是session_expired
,则使用login_activity
标记检查startActivity intent.flag_activity_clear_top
。
或
startActivity
login_activity
intent.flag_activity_clear_top
OnBackpressed()
item_details_activity
{/ 1}}
答案 2 :(得分:0)
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
在某些情况下不起作用。最好的方法是使用BroadcastReceiver
。您可以在启动时注册活动,并在活动销毁时取消注册。如果要清除所有内容,只需广播消息即可清除所有已注册的活动。