gpt4 book ai didi

android - launchMode singleTask 中的 Activity 在通过 TaskStackBuilder 启动时被销毁

转载 作者:行者123 更新时间:2023-11-29 16:55:36 27 4
gpt4 key购买 nike

我有一个 Activity A,在 Manifest 中用 android:launchMode="singleTask" 声明和另一个没有更多属性的 Activity B

据我所知,如果已经有一些任务在运行activity A,不是创建新实例,而是将当前任务放在最前面,如果我尝试开始 Activity A。

现在,我想使用 TaskStackBuilder 进行包括这两个 Activity 的调用。

假设我在 Activity A 中的 fragment 上并调用:

                TaskStackBuilder.create(context)
.addNextIntent(new Intent(context, A.class))
.addNextIntent(new Intent(context, B.class))
.startActivities();

我假设当前堆栈变为:A> B,其中 A 调用 onNewIntent 并且B 与一个新实例。此外,我希望 Activity A 保持它的状态。

但发生的情况是:我没有收到对 onNewIntent 的调用,但对 onDestroy 的 Activity A。如果我从新创建的 Activity B 返回,将为 Activity A 的新实例调用 onCreate。 (它们不相等!)。

谁能给我解释一下,为什么我的 Activity A 被丢弃而不是什么都不做,而是将 B 添加到堆栈中?很遗憾,我自己无法解决这个问题,但我看不到这里的障碍。

编辑/Ps:我用于 StackBuilder 的 context 可以是 View 上下文或服务上下文。

最佳答案

因此,到目前为止还没有人回答,同时我深入研究了 android 的代码,发现StackBuilder 本身就是问题

详细来说...这部分代码存在于方法 startActivities() 以及 getPendingIntent() 中,导致我的 Activity A 被摧毁:

    public PendingIntent getPendingIntent(int requestCode, int flags, Bundle options) {
if (mIntents.isEmpty()) {
throw new IllegalStateException(
"No intents added to TaskStackBuilder; cannot getPendingIntent");
}

Intent[] intents = mIntents.toArray(new Intent[mIntents.size()]);
intents[0] = new Intent(intents[0]).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK |
IntentCompat.FLAG_ACTIVITY_TASK_ON_HOME);
// Appropriate flags will be added by the call below.
return IMPL.getPendingIntent(mSourceContext, intents, requestCode, flags, options);
}

是这部分:

Intent[] intents = mIntents.toArray(new Intent[mIntents.size()]);
intents[0] = new Intent(intents[0]).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK |
IntentCompat.FLAG_ACTIVITY_TASK_ON_HOME);

我的 Activity A 在现有任务中。虽然它有 launchMode = "singleTask" 并且应该正常重新排序到前面,但 FLAG_ACTIVITY_CLEAR_TASK 设置为我的第一个 Activity (A)并导致现有任务将与要在 Activity 开始前清除的 A 相关联。

也就是说,我现在不会在我的特殊情况下使用 StackBuilder。我看到了几种方法:要么在之前使用一个空的 Activity我的第一个目标 Activity 或自己在其中构建堆栈我的 Activity AonCreate/onNewIntent,通过提供 Bundle从 parcelables( Intent )列表开始。

关于android - launchMode singleTask 中的 Activity 在通过 TaskStackBuilder 启动时被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057457/

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