【问题标题】:Do Intent Extras persist in a call stackIntent Extras 是否保留在调用堆栈中
【发布时间】:2018-06-09 00:47:36
【问题描述】:

如果ActivityA.setExtra(someKey, someValue)调用ActivityB,而ActivityB调用ActivityC,用户通过返回按钮返回到ActivityB,可以使用Activity@987654331 @ 仍然从 Activity A 访问 Extras?

  1. A
  2. A -> B(与Extra
  3. A -> B -> C 按下后退按钮
  4. A -> B(与Extra?)

Bundle 在这种情况下是保留还是丢弃?

我在When do intent extras become null between activities?Android Intent Extras Sticking Around 中找不到这个

【问题讨论】:

  • 我在一个演示项目中尝试了这个场景,并且能够在BonResume() 方法中获取该捆绑数据
  • can Activity B still access the Extras from Activity A? 是的。你可以通过尝试找到自己。
  • @greenapps:低内存状态、强制终止等怎么样?文档有什么保证吗?
  • 测试测试测试测试测试...
  • 我会以“并非总是如此!”来回答这个问题

标签: android android-activity


【解决方案1】:

ActivityB 中调用getIntent() 时,您将始终可以访问在以ActivityB 开头的Intent 中发送的“附加”。 Android坚持Intent(包括“附加”),这样即使Android杀死进程(因为用户把它放在后台),当用户返回应用程序时,Android会创建一个新进程并重新创建Activity与原来的Intent.

【讨论】:

  • 您需要阅读Android源代码。以下是官方文档中的一些参考资料:在developer.android.com/topic/libraries/architecture/…“系统启动的进程死亡”部分中,它说“此外,当您从意图打开活动时,额外的捆绑包会在配置更改以及系统何时恢复活动。"
【解决方案2】:

不,它们并不总是持续存在。大多数时候,它可以工作,但有时,额外的只是null,它在访问它时创建了一个NullPointerException。所以不能保证系统会保留Extra。最好把它保存在某个地方。

【讨论】:

  • 当然是持久化的。如果您收到null,那么还有其他问题。
  • @DavidWasser:第一次输入 B 时它总是有效,有时,从 C 返回时多余的部分消失了:不过,代码大部分时间都有效。要不要看代码?
  • 当然。从C返回时应该没有理由不工作。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2020-07-21
  • 2019-02-17
  • 1970-01-01
  • 2016-05-14
  • 2021-08-14
  • 1970-01-01
相关资源
最近更新 更多