【问题标题】:android -- question about singleTask modeandroid——关于singleTask模式的问题
【发布时间】:2011-06-07 16:42:16
【问题描述】:

在查看“任务和返回堆栈”指南的“定义启动模式”部分后,我不完全理解使用“singleTask”声明的活动的行为。

假设我启动了一个单一任务活动(通过 startActivity 方法),当该活动的一个实例位于后台任务的底部(根活动)时,

正如文章所描述的,我用来启动 singleTask-activity 的 Intent 将被传递给实例,在这种情况下,实例是否将自己置于其任务的顶部并将其任务置于前台,或者只是将其任务置于没有把自己置于任务的首位?

我会说清楚吗?请帮忙!提前致谢

【问题讨论】:

  • 我要感谢人们,我该怎么做?通过投票?
  • 您必须返回之前提出的问题并接受解决您问题的答案。目前您已提出 8 个问题,但未接受一个答案。

标签: android


【解决方案1】:

实际上,我曾经/现在有同样的问题。 在阅读了关于stackoverflow的回复并做了一些实验之后,我相信当一个singleTask活动已经在后台任务中启动时,系统会杀死所有 其他堆栈顶部的活动并恢复 singleTask 活动。

当然,这不是我从文档中得到的。

这是我的理论:

启动模式:活动 A:singleTask,活动 B:标准

实验 1

  • 启动 A ;堆栈:[A]
  • 从 A 启动 B;堆栈:[A|B]
  • 按主页;堆栈:[A|B]
  • 从启动器启动 A;堆栈:[A] (在 B 上调用了 onDestroy 在 A 上的 onResume() 之前)

实验 2

  • 启动 A ;堆栈:[A]
  • 从 A 启动 B;堆栈:[A|B]
  • 从 B 启动 A; stack: [A] (onDestroy 在 B 上被调用 在 A 上的 onResume() 之后)

就我而言,我不得不使用android:alwaysRetainTaskState="true",尽管这并不理想,因为我确实希望在 10 分钟后清除堆栈,因为这个建议是有意义的:

如果用户长时间离开任务 时间,系统清除任务 除根以外的所有活动 活动。当用户返回 再次执行任务,只有根活动是 恢复。系统以这种方式运行, 因为,经过长时间的 时间,用户可能已经放弃了什么 他们以前做过,现在是 回到任务开始 一些新的东西。

来自Tasks and Back Stack 指南。

我希望这对其他人有所帮助。

【讨论】:

    【解决方案2】:

    如果Activity 已经存在,它将为Activity 调用onNewIntent()。由于Activity 在收到新的Intent 之前总是暂停,所以onResume() 将在收到onNewIntent() 后不久被调用。调用onResume() 的事实意味着Activity 将出现在前台并对用户可见。

    【讨论】:

    • 感谢回复,现在可以肯定已有的实例会来到前台,但是,怎么会来到前台呢?在它的顶部弹出这些活动,直到它自己在该任务的顶部?还是其他方法?
    • 文档似乎没有具体说明它是如何到达堆栈顶部的。它只保证如果onNewIntent() 被调用,那么onResume() 将被调用并且我们正在处理的Activity 会出现在前台。
    【解决方案3】:

    那么 FLAG_ACTIVITY_CLEAR_TOP 和 Single Task 有什么不同呢?

    区别仅在于 FLAG_ACTIVITY_CLEAR_TOP 是单个任务的子集,仅当被调用的活动是当前任务的一部分时才能以相同的方式工作?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2021-06-08
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多