我有登录,主要活动和其他活动的程序。 第一步是登录活动(A)。如果登录成功,则启动主要活动(B)并为(A)调用完成。 与(B)合作我正在调用一些活动,然后回到(B)。 当决定退出时 - 我呼叫注销并尝试关闭(B)调用完成。 这个logik在70%的时间内工作:( 不幸的是,在调用(B)完成后30%,活动(A)出现在屏幕上并开始记录我。
谁又开始了(B)?我看不出问题和程序使用之间的关系。
更新: 我把(B)的hohistory和FLAG_ACTIVITY_CLEAR_TOP开始(B)。
UPDATE2:当我在代码中设置屏幕方向模式时,描述的行为是典型的。在清单中设置肖像。启动活动时,我根据用户配置设置方向。这产生了两次。我设法妥善处理这个,但这会导致问题,如上所述。如果我没有设置方向 - 一个onCreate被调用,完成没问题。
答案 0 :(得分:1)
您可以在activity
B登出时尝试此操作。活动会显示主屏幕。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
答案 1 :(得分:1)
检查以下链接,您将获得解决方案:
Finish parent and current activity in Android
http://developer.android.com/guide/topics/manifest/activity-element.html#clear).You
答案 2 :(得分:1)
您是从IDE(如eclipse)还是从应用安装程序启动应用程序?如果是这样,如果您执行以下操作,您将看到这种情况。
此序列将创建您的第一个活动的2个副本,一个在另一个活动之上。完成顶部后,将显示其下方的那个。
你说这不会一直发生。如果您不从IDE启动应用程序,但只是从可用应用程序列表中启动,您将看不到此行为。此外,如果您从未按下HOME键并使用可用应用程序列表重新启动应用程序,您也不会看到此行为。
答案 3 :(得分:0)
当您第一次从活动A转到活动B时,您应该清除堆栈顶部。否则,活动A停留在B下方的堆栈中,当你完成B时,再次调用活动B.
答案 4 :(得分:0)
您应该在清单文件android:noHistory="true"
中设置,以使您的A活动不会停留在Android堆栈上。
如果您希望以后通过使用意图Intent.FLAG_ACTIVITY_NO_HISTORY
从代码中执行此操作,将为您完成工作..干杯
答案 5 :(得分:0)
使用setScreenOrientation使认为复杂。 不需要为activityA设置noHistory并使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK调用activityB。
以纵向模式启动应用程序/在清单中声明/ - 没关系。 但是当调用setScreenOrientation时 - 必须调用finishB 2次才能退出。 /可能是因为2次onCreate for activityB /.
对于activityA:android:noHistory =“true”和清单中的android:launchMode =“singleInstance”。 使用startActivityForResult启动activityB并标记FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK。
在activityA中: 1. startActivityForResult(activityB) 2.完成A.
在activityB中 - 当为B调用finish()时 - 由于'singleinstance'系统,不再启动activityA。
希望这有帮助。 如果有人知道会导致错误的原因 - 请写信给我。