gpt4 book ai didi

android - 为什么 Activity A在 Activity B被销毁时开始

转载 作者:行者123 更新时间:2023-11-29 01:34:15 25 4
gpt4 key购买 nike

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

list 中的 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>

以及 Activity B 如何从 BroadcastReceiver 启动:

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 的 list 声明中:

android:taskAffinity=""

现在 B 将在其自己的任务中启动,即使已经存在一个包含 A 的任务也是如此。

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

关于android - 为什么 Activity A在 Activity B被销毁时开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29463137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com