为什么 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
一个不同于 A
的 taskAffinity
。将此添加到 B
:
的清单声明中
android:taskAffinity=""
现在 B
将在其自己的任务中启动,即使已经存在包含 A
的任务。
但是请注意,如果 A
和 B
在不同的任务中 运行,您可能应该为 B
,否则用户在查看最近的任务列表时会感到困惑。他将看到 A
的一项和 B
的一项,但它们具有相同的图标和标签。
我有 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
一个不同于 A
的 taskAffinity
。将此添加到 B
:
android:taskAffinity=""
现在 B
将在其自己的任务中启动,即使已经存在包含 A
的任务。
但是请注意,如果 A
和 B
在不同的任务中 运行,您可能应该为 B
,否则用户在查看最近的任务列表时会感到困惑。他将看到 A
的一项和 B
的一项,但它们具有相同的图标和标签。