2016-04-25 59 views
3

我想保留每个Activity单个实例我开始在我的应用程序中。 launchMode singleTask是一个选项,但它仅适用于一个Activity仅保留整个应用程序中的每个活动的一个实例

我想

  • 如果没有实例,它被称为启动一个Activity
  • 并且如果该Activity的任何其他实例已经存在,那么该实例将在未创建该Activity的新实例 的情况下被带到前面。
  • 此属性将应用于多个Activity
  • Activity确保它始终位于历史堆栈的顶部。

我的工作至今:

我得到了许多建议其不适用于我的情况,所以我想指出这些了,这样其他人会给出相同的建议。

  • 我已经设置了launchModesingleTop,如果Activity处于历史堆栈的顶部这只适用。如果Activity位于历史堆栈的顶部,则仅调用onNewIntent()。在我的情况下,Activity可能在堆栈中的任何位置。所以这不起作用。
+0

使用singleTop的每个活动 – Nfear

回答

5

当你启动一个Activity,像这样做:

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

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

+1

解决了我的问题。谢谢 。 –

+1

@David Wasser:对我来说同样的问题。为我的问题工作,欢呼! – AJW

0

使用singleTop启动模式,而不是(docs):如果已经是在栈中的调用者任务上同类型的活动情况,不会有任何新创建的活动,而不是意图将在通过onNewIntent()方法发送到现有的Activity实例。

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

+0

都会试试看。并让你知道。 –

+0

所以我认为活动必须在历史堆栈的顶部才能在您给定的条件下工作。我的情况并非如此。请纠正我,如果我错了@Marcin。 –

+0

好吧,我的问题稍有不同。实际上,@ david-wasser使用'FLAG_ACTIVITY_REORDER_TO_FRONT'的答案没问题,我正在赞扬他的 –

2

您可以设置机器人:您的活动launchModesingleTop 在这种情况下,如果该活动已经存在,新的意图将其带到前将交付给该活动的onNewIntent() http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

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

,如果你想有活动的一个实例,那么你就可以在你的launchMode设置为singleTask,但不建议这样做,因为它会让你的活动驻留在一个单独的任务,这可能会造成混淆给用户。

+0

我假设这个活动必须在历史堆栈的顶部才能在你给定的条件下工作。我的情况并非如此。如果我错了,请纠正我@Mina。 –

+0

是的,你是对的,它必须在堆栈顶部 –

+0

,但我的情况是不同的。请参阅编辑的问题。 –

相关问题