android - 关于singleTask模式的问题

时间:2011-06-07 16:42:16

标签: android

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

假设我在后台任务的底部(根活动)中存在该活动的实例时启动singleTask活动(通过startActivity方法),

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

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

3 个答案:

答案 0 :(得分:7)

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

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

这是我的理论:

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

实验1

  • 启动A;堆栈:[A]
  • 从A发射B;堆栈:[A | B]
  • 按回家;堆栈:[A | B]
  • 从发射器发射A; Stack:[A] (在B上调用onDestroy 在A)上的onResume()之前

实验2

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

在我的情况下,我不得不使用android:alwaysRetainTaskState="true",虽然这并不理想,因为我希望在10分钟之后清除堆栈,因为这个建议是有道理的:

  

如果用户离开任务很长时间   时间,系统清除任务   除root之外的所有活动   活动。当用户返回时   再次执行任务,只有root活动   恢复。系统就是这样的,   因为,经过长期的   时间,用户可能已经放弃了什么   他们以前做的都是   回到任务开始   新事物。

来自Tasks and Back Stack指南的

我希望这有助于其他人。

答案 1 :(得分:0)

如果Activity已存在,则会为Activity致电onNewIntent()。由于在收到新Activity之前始终会暂停Intent,因此会在收到onResume()后不久调用onNewIntent()。事件onResume()被调用意味着Activity将出现在前台并且对用户可见。

答案 2 :(得分:0)

那么FLAG_ACTIVITY_CLEAR_TOP与单一任务有何不同?

唯一的区别是FLAG_ACTIVITY_CLEAR_TOP是单个任务的子集,它只能以相同的方式工作,但前提是被调用的活动是当前任务的一部分吗?