2011-06-07 56 views
3

在查看'Tasks and Back Stack'指南的'Defining launch modes'部分之后,我完全不了解使用“singleTask”声明的活动的行为。android-有关singleTask模式的问题

假设我启动singleTask活性(通过startActivity方法)当存在活动在底部(根活性)一个后台任务的铺设的一个实例,

作为文章描述,意图我使用开始singleTask活动将被传递给实例,在这种情况下,实例是否将自己置于其任务的顶部并将其任务置于前台,或者只是将其任务置于前台而不将自己置于其任务的顶部?

我是否让自己清楚?请帮忙!在此先感谢

+0

我想感谢人们,我该怎么做?通过投票? – user718146 2011-06-08 01:22:46

+0

您必须回到之前提出的问题并接受解决问题的答案。目前你已经提出了8个问题,并没有接受一个答案。 – 2011-06-08 02:06:35

+0

你可以看看这个aswer http://stackoverflow.com/questions/2417468/android-bug-in-launchmode-singletask-activity-stack-not-preserved – tantra35 2013-04-13 05:27:32

回答

7

我当时实际上有同样的问题。 这里阅读计算器答复,并做了一些实验,我相信时虽然它已经在后台任务一个singleTask活动启动时,系统会杀死所有其他活动在堆栈顶部并恢复singleTask活动。

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

这是我的理论:

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

实验1个

  • 启动A;堆栈:[A]
  • 从A启动B;堆栈:[A | B]
  • 按回家;堆栈:[A | B]
  • 从发射器发射A;堆栈:[A] (的onDestroy被称为第B 上形成的onResume()之前)

实验2

  • 启动A;堆栈:[A]
  • 从A启动B;堆栈:[A | B]
  • 从B启动A;堆栈:[A] ()上的一个的onDestroy被称为基于B 的onResume(后)

就我而言,我不得不使用android:alwaysRetainTaskState="true"虽然这不是理想的,因为我想堆被清除之后,说10分钟的这一建议是有道理的:

如果用户离开任务很长一段时间 ,系统将清除的 所有活动任务除了根 活动。当用户再次返回到 任务时,只有根活动恢复为 。该系统的行为这种方式,因为 的 时间延长的量之后,用户可能已经放弃什么 他们做之前,并 返回任务开始 新的东西。

来自Tasks and Back Stack指南。

我希望这可以帮助其他人。

+0

+1 ...很好的答案 – Anirudha 2013-07-01 05:34:10

0

如果Activity已存在,它将调用onNewIntent()Activity。由于Activity在收到新的Intent之前总是暂停,因此将在收到onNewIntent()后立即调用onResume()。调用onResume()这一事实意味着Activity将会出现在前台并对用户可见。

+0

谢谢你的回复,现在肯定现有的实例会来到前景,但是,它是如何前景?将其顶部的这些活动弹出,直至完成该任务的顶部?或其他方法? – user718146 2011-06-08 01:19:31

+0

该文档似乎没有具体说明如何进入堆栈顶部。它只保证如果调用'onNewIntent()',那么'onResume()'将会被调用,并且我们正在处理的'Activity'我们会到达前台。 – 2011-06-08 02:05:19

0

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

只有FLAG_ACTIVITY_CLEAR_TOP是单个任务的一个子集的区别,只有当被调用的活动是当前任务的一部分时才起作用。