Android 如何完成堆栈中的所有活动,并在没有回退历史记录的情况下运行新活动?

Android 如何完成堆栈中的所有活动,并在没有回退历史记录的情况下运行新活动?,android,user-interface,Android,User Interface,我的android应用程序中有下一个导航: 登录\u活动->主要\u活动->项目详细信息\u活动 登录\u活动在用户登录后完成。 main_活动显示项目(从服务器接收)。当用户在main\u activityListView中单击项目时,将显示新的item\u details\u activity,但main\u activity未完成(以便让用户按下后退按钮并返回到main\u activity) 问题是会话可能会过期(登录时收到令牌),并且我在项目\u详细信息\u活动中出现服务器异常。然后我

我的android应用程序中有下一个导航:
登录\u活动
->
主要\u活动
->
项目详细信息\u活动

登录\u活动
在用户登录后完成。
main_活动
显示项目(从服务器接收)。当用户在
main\u activity
ListView中单击项目时,将显示新的
item\u details\u activity
,但
main\u activity
未完成(以便让用户按下后退按钮并返回到
main\u activity

问题是会话可能会过期(登录时收到令牌),并且我在
项目\u详细信息\u活动
中出现服务器异常。然后我必须完成堆栈中的所有活动(
item\u details\u activity
main\u activity
)并运行
login\u activity
,无历史记录

如何完成堆栈中的所有活动

设置全局
会话\u expired
标志并在堆栈中所有可能的活动中检查它不是一个好主意。

您可以尝试:

Intent in = new Intent(getBaseContext(), HomeActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(in);

一旦这些活动退出堆栈,它们将被android运行时自动删除。

检查
主活动的
onResume()
中的会话标志,如果它是
session\u过期的
,则使用
意图启动活动
登录活动。
清除活动标志


您可以使用
意图
启动活动
登录活动
。在
OnBackpressed()
项目详细信息活动
中,在
项目详细信息活动中标记活动清除顶部
。在某些情况下,标记活动清除任务
不起作用。最好的方法是使用
广播接收器
。您可以在活动启动时注册它,并在活动销毁时注销它。在这两者之间,如果您想清除所有,只需广播消息以清除所有已注册的活动

这是否意味着“item_details_activity”和“main_activity”仍保留在前一个堆栈中(因为新的“login_activity”在新任务中启动),并由android释放?使用
Intent.FLAG_activity_new_task
有什么意义?为什么不在当前任务中使用
Intent.FLAG\u ACTIVITY\u CLEAR\u TASK
?您也可以尝试一下@4NTOINE活动在后台时如何接收广播?接收器需要在onPause()中注销。您可以在onDestroy()中注销该接收器,然后在onCreate中注册?