在整个应用中只保留每个 activity 的一个实例

Keep only one instance of each activity in entire app

我想为我在应用程序中启动的每个 Activity 保留一个 单个实例。 launchMode singleTask 是一个选项,但它仅适用于一个 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 的实例已经存在,那么它将被移到前面。如果实例不存在,将创建一个新实例。