完成活动

时间:2012-03-22 15:29:10

标签: android android-activity

我有登录,主要活动和其他活动的程序。 第一步是登录活动(A)。如果登录成功,则启动主要活动(B)并为(A)调用完成。 与(B)合作我正在调用一些活动,然后回到(B)。 当决定退出时 - 我呼叫注销并尝试关闭(B)调用完成。 这个logik在70%的时间内工作:( 不幸的是,在调用(B)完成后30%,活动(A)出现在屏幕上并开始记录我。

谁又开始了(B)?我看不出问题和程序使用之间的关系。

更新: 我把(B)的hohistory和FLAG_ACTIVITY_CLEAR_TOP开始(B)。

UPDATE2:当我在代码中设置屏幕方向模式时,描述的行为是典型的。在清单中设置肖像。启动活动时,我根据用户配置设置方向。这产生了两次。我设法妥善处理这个,但这会导致问题,如上所述。如果我没有设置方向 - 一个onCreate被调用,完成没问题。

6 个答案:

答案 0 :(得分:1)

您可以在activity B登出时尝试此操作。活动会显示主屏幕。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);

答案 1 :(得分:1)

答案 2 :(得分:1)

您是从IDE(如eclipse)还是从应用安装程序启动应用程序?如果是这样,如果您执行以下操作,您将看到这种情况。

  • 从IDE启动应用程序或从安装程序安装后(显示您的第一个活动)
  • 按HOME键(将您带回主屏幕)
  • 通过从可用应用程序列表中选择它来再次启动您的应用程序

此序列将创建您的第一个活动的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。

希望这有帮助。 如果有人知道会导致错误的原因 - 请写信给我。