Android 如何完成堆栈中的所有活动,并在没有回退历史记录的情况下运行新活动?
我的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活动中出现服务器异常。然后我
登录\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中注册?