为什么 activity A 在 activity B 被销毁时启动

Why is activity A started when activity B is destroyed

我有 2 个活动,比如 A 和 B,A 是通过启动器图标照常启动的。另一方面,B 是通过 BroadcastReceiver 启动的。我在这里不太明白的是 activity B 被销毁然后 activity A 被打开?我只是看不到这其中的联系,这种行为是不想要的。我之前通过禁用 activity 上的历史记录解决了这个问题,但是新功能强制使用历史记录,因此需要另一个解决方案。

Activity 清单中的声明:

<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 启动 activity B:

Intent intent = new Intent(context, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(intent);

我真的不明白 activity B 在 B 被销毁后如何找到通往 activity A 的路?如何避免这种情况?

当您启动 B 时,Android 检查是否已经存在具有与 B 相同 taskAffinity 的现有任务(在您的情况下,与A)。如果它找到一个,它会将那个任务带到前台并在其之上启动 B。当 B 完成后,它会将用户放入 A.

要更改此行为,您需要给 B 一个不同于 AtaskAffinity。将此添加到 B:

的清单声明中
android:taskAffinity=""

现在 B 将在其自己的任务中启动,即使已经存在包含 A 的任务。

但是请注意,如果 AB 在不同的任务中 运行,您可能应该为 B,否则用户在查看最近的任务列表时会感到困惑。他将看到 A 的一项和 B 的一项,但它们具有相同的图标和标签。