我想在应用程序中启动的每个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发送到现有的活动实例。
另请参阅本文,了解有关启动模式的详细信息。