2011-03-03 50 views
2

活动A使用startActivityForResult启动B,而B使用startActivity启动C。之后,活动堆栈是AB C.FLAG_ACTIVITY_REORDER_TO_FRONT和startActivityForResult

现在假设,使用FLAG_ACTIVITY_REORDER_TO_FRONT标志,那么活动堆栈将成为AC B.ç使得基于B startActivity呼叫

我的问题是,现在,当B完成自身,A中的onActivityResult()会因B退出而被调用吗?

谢谢。

+0

确保标记正确的答案,它会鼓励他人来帮助你。 – 2011-03-03 22:48:23

回答

5

来看由文档finish()

调用此当你的活动做 ,应该被关闭。 ActivityResult传播回 通过onActivityResult()启动您的人。

这使我相信,即使C位于两者之间,A也会得到B的结果。

编辑 - 经过一些测试,我在这里发现了一些有趣的交互。

事件的顺序,经过一些日志记录:

  1. 甲开始
  2. 乙开始
  3. 下开始
  4. 乙恢复(与FLAG_ACTIVITY_BRING_TO_FRONT)
  5. 乙完成
  6. Ç恢复(它在B)
  7. ç完成
  8. 一个恢复,并得到B的结果

换句话说,A得到B的结果符合市场预期,但它Ç结束后发生和A被恢复。

+0

谢谢。你知道C为什么完成吗?没有代码完成C.我预期的最终堆栈状态是A.C. – Kai 2011-03-03 22:16:02

+0

我手动完成了C语言。关键是,除非你完成C(或以某种方式暴露A),否则A不会得到B的结果。 – 2011-03-03 22:48:06

+0

我想知道如果C用startActivityForResult启动B,会发生什么情况。 C和A都会得到B的结果吗?当你在B中调用setResult时它有什么区别吗? – 2011-03-04 01:09:34