我有2个活动,比如A和B,A通过启动器图标像往常一样启动。另一方面,B通过BroadcastReceiver
开始。我在这里真正理解的是活动B被销毁然后活动A被打开了吗?我无法在此看到连接,并且不希望出现这种情况。我之前通过禁用活动A的历史记录解决了这个问题,但新功能强制执行历史记录,因此需要另外的解决方案。
清单中的活动声明:
<activity android:name="com.example.A"
android:noHistory="false" android:launchMode="singleTask"
android:label="@string/APP_NAME">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.B" android:noHistory="true"
android:screenOrientation="portrait" android:label="@string/APP_NAME">
</activity>
如何从BroadcastReceiver
启动活动B:
Intent intent = new Intent(context, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(intent);
在B被摧毁之后,我真的不知道B活动是如何找到活动A的?如何防止这种情况?
答案 0 :(得分:1)
当您启动B
时,Android会检查现有任务是否已存在与taskAffinity
相同的B
(在您的情况下,与A
相关联的任务) 。如果找到一个,它会将该任务带到前台并在其上面启动B
。 B
完成后,会将用户放入A
。
要更改此行为,您需要为B
提供与taskAffinity
不同的A
。将其添加到B
:
android:taskAffinity=""
现在B
将在其自己的任务中启动,即使其中已存在A
的现有任务。
但请注意,如果A
和B
在不同的任务中运行,您应该为B
提供不同的图标或至少不同的标签,否则用户在查看最近的任务列表时会感到困惑。他会看到A
的一个条目和B
的一个条目,但它们都会有相同的图标和标签。