7

我想为我在应用程序中启动的每个实例保留一个实例。ActivitylaunchModesingleTask是一个选项,但它仅适用于一个Activity.

我想

  • Activity如果没有实例并调用它,则启动一个。
  • 如果它的任何其他实例Activity已经存在,那么该实例将被带到前面而不创建该的新实例Activity
  • 此属性将应用于多个Activity.
  • Activity保证它总是在历史堆栈的顶部。

我到目前为止的工作:

我收到了许多对我的案例无效的建议,所以我想指出这些,以免其他人给出相同的建议。

  • 我已将 to 设置为launchModesingleTop并且仅当Activity它位于历史堆栈的顶部时才有效。onNewIntent()Activity仅在位于历史堆栈顶部时才被调用。在我的情况下,Activity可能在堆栈中的任何位置。所以这是行不通的。
4

3 回答 3

23

当您启动 时Activity,请执行以下操作:

Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

如果这个实例Activity已经存在,那么它将被移到前面。如果实例不存在,则会创建一个新实例。

于 2016-04-25T13:08:09.600 回答
4

您可以将活动的android:launchMode设置为singleTop 在这种情况下,如果活动已经存在,新的意图将把它带到前面将被传递到活动的onNewIntent() http://developer.android.com/guide/主题/清单/activity-element.html#lmode

如果您的活动位于堆栈顶部,这将起作用。

如果你想拥有一个活动实例,那么你可以将你的launchMode设置为singleTask,但不建议这样做,因为它会使你的活动驻留在一个单独的任务中,这可能会让用户感到困惑。

于 2016-04-25T12:25:10.157 回答
0

改用singleTop启动模式(docs):如果调用者Task中栈顶已经有同类型的Activity实例,则不会创建任何新的Activity,而是将Intent发送到已经存在的Activity实例onNewIntent() 方法。

有关启动模式的详细信息,另请参阅本文

于 2016-04-25T12:24:23.710 回答