在整个应用中仅保留每个活动的一个实例



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

我要

  • 如果没有实例并且被调用,则启动Activity
  • 如果该Activity的任何其他实例已经存在,那么该实例将置于前台,而无需创建新实例的那个Activity.
  • 此属性将应用于多个Activity
  • 没有Activity保证它将始终位于历史记录堆栈的顶部。

我到现在为止的工作:

我有很多建议对

我的情况无效,所以我想指出这些建议,这样其他人就不会给出同样的建议。

  • 我已将launchMode设置为 singleTop,仅当Activity位于历史记录堆栈的顶部时,这才有效。 onNewIntent() 仅在 Activity 位于历史堆栈顶部时才被调用。 就我而言,Activity可能位于堆栈中的任何位置。所以这是行不通的。

当你启动一个Activity时,这样做是这样的:

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

如果此Activity的实例已存在,则它将被移动到前面。如果实例不存在,将创建一个新实例。

您可以将活动的 android:launchMode 设置为 singleTop在这种情况下,如果活动已经存在,则新意图将使其置于前面,并将传递到活动的 onNewIntent()http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

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

如果要拥有活动的单个实例,则可以将启动模式设置为singleTask,但不建议这样做,因为它会使您的活动驻留在单独的任务中,这可能会使用户感到困惑。

改用singleTop启动模式(docs):如果在调用方任务的堆栈顶部已经有一个相同类型的活动实例,则不会创建任何新的活动,而是通过onNewIntent()方法将Intent发送到现有的活动实例。

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

相关内容

  • 没有找到相关文章

最新更新