在整个应用中只保留每个 activity 的一个实例
Keep only one instance of each activity in entire app
我想为我在应用程序中启动的每个 Activity
保留一个 单个实例。 launchMode singleTask
是一个选项,但它仅适用于一个 Activity
.
我要
- 如果没有实例并被调用,则启动一个
Activity
。
- 如果
Activity
的任何其他实例已经存在,那么
该实例将被带到前面而不创建新实例
其中 Activity
.
- 此 属性 将应用于多个
Activity
。
- 否
Activity
确实保证它将始终位于历史堆栈的顶部。
我到目前为止的工作:
我收到了很多对我的情况无效的建议,所以我想指出这些建议,以免其他人给出相同的建议。
- 我已将
launchMode
设置为 singleTop
,这仅在 Activity
位于历史堆栈顶部时有效。 onNewIntent() 只有在 Activity
位于历史堆栈顶部时才会被调用。在我的例子中,Activity
可能位于堆栈中的任何位置。所以这是行不通的。
改为使用singleTop
启动模式(docs):如果在调用者任务的堆栈顶部已经有一个具有相同类型的Activity实例,则不会有是任何新创建的 Activity,Intent 将通过 onNewIntent() 方法发送到现有的 Activity 实例。
另请参阅 this article 了解有关启动模式的详细信息。
您可以将 activity 的 android:launchMode 设置为 singleTop
在这种情况下,如果 activity 已经存在,新的意图将把它带到前面,将传递给 activity 的 onNewIntent()
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
如果您的 activity 位于堆栈顶部,这将起作用。
如果你想要 activity 的单个实例,那么你可以将 launchMode 设置为 singleTask,但不推荐这样做,因为它会使您的 activity 驻留在单独的任务中,这可能会让用户感到困惑。
当您启动 Activity
时,请这样做:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
如果这个 Activity
的实例已经存在,那么它将被移到前面。如果实例不存在,将创建一个新实例。
我想为我在应用程序中启动的每个 Activity
保留一个 单个实例。 launchMode singleTask
是一个选项,但它仅适用于一个 Activity
.
我要
- 如果没有实例并被调用,则启动一个
Activity
。 - 如果
Activity
的任何其他实例已经存在,那么 该实例将被带到前面而不创建新实例 其中Activity
. - 此 属性 将应用于多个
Activity
。 - 否
Activity
确实保证它将始终位于历史堆栈的顶部。
我到目前为止的工作:
我收到了很多对我的情况无效的建议,所以我想指出这些建议,以免其他人给出相同的建议。
- 我已将
launchMode
设置为singleTop
,这仅在Activity
位于历史堆栈顶部时有效。 onNewIntent() 只有在Activity
位于历史堆栈顶部时才会被调用。在我的例子中,Activity
可能位于堆栈中的任何位置。所以这是行不通的。
改为使用singleTop
启动模式(docs):如果在调用者任务的堆栈顶部已经有一个具有相同类型的Activity实例,则不会有是任何新创建的 Activity,Intent 将通过 onNewIntent() 方法发送到现有的 Activity 实例。
另请参阅 this article 了解有关启动模式的详细信息。
您可以将 activity 的 android:launchMode 设置为 singleTop 在这种情况下,如果 activity 已经存在,新的意图将把它带到前面,将传递给 activity 的 onNewIntent() http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
如果您的 activity 位于堆栈顶部,这将起作用。
如果你想要 activity 的单个实例,那么你可以将 launchMode 设置为 singleTask,但不推荐这样做,因为它会使您的 activity 驻留在单独的任务中,这可能会让用户感到困惑。
当您启动 Activity
时,请这样做:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
如果这个 Activity
的实例已经存在,那么它将被移到前面。如果实例不存在,将创建一个新实例。