我希望在我的应用程序中启动每个Activity
的 单个实例 。 launchMode singleTask
是一个选项,但它仅适用于一个Activity
。
我想要
Activity
。Activity
的任何其他实例
该实例将在不创建新实例的情况下提前
那个Activity
。Activity
。Activity
可以保证它始终位于历史堆栈的顶部。我的工作到现在为止:
我收到了许多对我的案件无效的建议,所以我想指出这些建议,以便没有其他人会提出同样的建议。
launchMode
设置为singleTop
,这仅在Activity
位于历史记录堆栈顶部时才有效。 onNewIntent()仅在Activity
位于历史堆栈顶部时才会被调用。在我的情况下,Activity
可能位于堆栈中的任何位置。所以这不起作用。答案 0 :(得分:9)
启动Activity
时,请执行以下操作:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
如果此Activity
的实例已存在,则会将其移至前端。如果实例不存在,将创建一个新实例。
答案 1 :(得分:3)
您可以将活动的 android:launchMode 设置为 singleTop 在这种情况下,如果活动已经存在,新的意图将它带到前面将被传递到活动的 onNewIntent() http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
如果您的活动位于堆栈顶部,这将有效。
如果您想拥有该活动的单个实例,则可以将 launchMode 设置为 singleTask ,但不建议这样做,因为它会使您的活动驻留在一个单独的任务中,这可能会让用户感到困惑。
答案 2 :(得分:0)
改为使用singleTop
启动模式(docs):如果调用者任务中堆栈顶部已存在具有相同类型的Activity实例,则不会创建任何新的Activity,相反,Intent将通过onNewIntent()方法发送到现有的Activity实例。
有关启动模式的详细信息,请参阅this article。