- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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 A 的 onCreate
/onNewIntent
,通过提供 Bundle从 parcelables( Intent )列表开始。
关于android - launchMode singleTask 中的 Activity 在通过 TaskStackBuilder 启动时被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057457/
如果我们有 2 个 Activity,A 和 B,它们都在 AndroidManifest.xml 中定义为 singleTask,当A启动B时,A将被关闭(onDestroy()被立即调用)。为什么
谁能给我一个例子,说明我们如何通过在堆栈顶部创建一个具有 launchMode=singleTask 的 Activity 来创建任务返回堆栈,并且它不是返回堆栈中的唯一 Activity 。 例如,
我阅读了 android 开发者指南和互联网上的一些文章,我仍然对 singleTask launchmode 感到困惑。举个例子: 用户启动 App1,android 启动一个新任务。假设 App1
我有一个启动器应用,它有一个singleTask Activity 作为主要入口点。当用户导航到另一个 Activity 或第 3 方应用程序,然后点击 主页按钮 时,应该将此 Activity 置于
我已声明我的 Activity 的启动模式为 singleTask。如果我启动我的应用程序,按主页按钮,转到电子邮件客户端(在本例中为 gmail)并使用我的应用程序预览附件,我我在 Android
我有两个应用程序,我将它们分别称为应用程序 A 和应用程序 B。应用程序 B 是一个单任务应用程序,通常情况下,如果您从主屏幕启动此应用程序并使用后退按钮,您将不会被允许返回主屏幕。现在假设应用程序
我在 list 中定义了一个 Activity “A”,如下所示: 当我启动我的应用程序时,该 Activity 总是从一开始就加载。它不会
我对 Activity 启动模式感到非常困惑。这是场景。 Activity A - main, launcher with singleTask launch mode Activity B - si
可能重复 Deep linking and multiple app instances .我在我的应用程序中实现了深度链接。我有作为启动器的 Splash Activity 和处理 list 中定义
我知道有一些帖子可以解答我要问的问题,但我找不到任何正确答案。 根据我的理解,如果您的主要 Activity (我们称它为 A)的启动模式设置为 singleTask,并且 A 已启动 Activit
在我的应用程序中有一个我不理解的行为。我将 MainActivity A 作为 SingleTask。它调用 Activity B 也是 SingleTask。当我在第二个 Activity 中按下
我有 2 个 Activity:Activity A 和 Activity B。Activity A 的启动模式是标准的,Activity B 的启动模式是 singleTask。
我一直在学习 Android,并且遇到了 launchMode="singleTask"的问题。文档指出,当使用此属性时,Activity 始终作为根 Activity 启动到新任务中。其次,文档指出
我有一个在后台运行并通过通知系统显示错误消息的应用程序。此通知有一个 pendingIntent,它会返回到应用程序的主屏幕。在这个主屏幕上,我设置了 launchmode="singleTask"。
这张图对理解很有帮助launhmode singleTask 提供的功能,取自 here 但是,我在同一应用程序的情况下理解这一点,我在理解时遇到问题 如果两个任务属于两个不同的应用程序怎么办 令人困
我已经阅读了谷歌 Android 开发者页面,但任务的概念 ( http://developer.android.com/guide/components/tasks-and-back-stack.h
我有一个主要 Activity ,启动模式设置为“singleTask”。当我将其置于前台并调用 onNewIntent 方法时,它会运行一个包含 while 循环的 AsyncTask,该循环从文本
我在将单一任务 Activity 重新显示在 View 中时遇到了一些麻烦。 list : 我的 Activity 代码: Intent i
我一直在阅读关于启动模式的文档,有一件事我不明白。doc表示单任务活动始终是堆栈的根: 相反,“singletask”和“singleinstance”活动只能 开始一项任务。它们始终位于活动堆栈的根
我有一个围绕主要 Activity (主菜单)的应用程序。在每个其他应用程序中,都有一个指向此 Activity 的选项菜单项。 起初,我总是在选择这个项目时开始一个新的主要 Activity 。使用
我是一名优秀的程序员,十分优秀!