我知道launchMode:"singleTask"意味着如果之前已经创建了一个活动,并且将来被请求显示,Android将只显示旧的而不是创建一个新的实例。我面临的问题可以用一个例子来说明:-
假设我们有两个活动
一个行动
B(启用了 launchMode="singleTask") 的活动(这是其清单声明中的所有内容)
现在,如果 A 创建了一个对应于 B (A->B) 的意图,则 A 完成并从活动堆栈中删除。我怎样才能防止这种情况发生.我想要的是,当 A 调用 B(创建意图)时,返回 B 的先前实例,并且 A 保持原样并且不会被销毁。谢谢你的帮助。任何帮助不胜感激
编辑
<activity
android:name="com.example.Activities.A"
android:launchMode="singleTask"
android:clearTaskOnLaunch="false"
android:finishOnTaskLaunch="false"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.example.Activities.B"
android:launchMode="singleTask"
android:clearTaskOnLaunch="false"
android:finishOnTaskLaunch="false"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
如果您只想在同一任务中来回切换 2 个活动,那么您应该删除所有特殊的启动模式,只需像这样从另一个活动启动一个活动:
Intent intent = new Intent(this, ActivityX.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
如果您使用此方法从A
开始B
,并且还使用此方法从B
开始A
,那么您的任务中每个Activity
都有一个实例,它们只会更改堆栈中的位置。这不会创建任何新实例。
还要删除<intent-filter>
声明,您不需要它们。您只需要一个根Activity
,其中应包含"ACTION=MAIN"和"CATEGORY=LAUNCHER"。