gpt4 book ai didi

android - 重写 onNewIntent 时是否有任何理由不调用 setIntent?

转载 作者:IT老高 更新时间:2023-10-28 22:06:24 30 4
gpt4 key购买 nike

遇到类似于 this question 的问题时,我开始想知道为什么我们在重写 onNewIntent 时必须显式调用 setIntent,以及为什么 super.onNewIntent 还没有执行此代码.

@Override
public void onNewIntent(Intent intent)
{
super.onNewIntent(intent);

// Why isn't this performed by the framework in the line above?
setIntent(intent);
}

最佳答案

Intent 对象会永久附加到 ActivityService 和其他组件,只要这些组件正在运行。它们不会因为您转移到另一个应用程序而简单地消失。这样做的原因是因为 Android 可能随时终止进程,但用户可能仍想返回并继续他们正在做的事情。这使得 Intent 成为通过 Extras 存储或传输少量(有时是大量)信息的理想选择。

onNewIntent() 方法专门用于处理更持久的应用程序组件,因此在其生命周期期间可能会被多次调用,但需要跟踪调用它的原因(以及因此它被调用的数据)。是否调用 setIntent() 取决于你需要做什么。

如果你不关心它为什么随后被调用,你可以通过不调用 setIntent() 来保留原来的 Intent。当您的 Activity(或其他一些组件)无论是谁调用它以及它提供什么数据都执行相同的操作时,这尤其有用。

如果您需要单独响应每个事件,那么您至少必须存储新的Intent 的信息。这意味着您可以避免使用 setIntent(),但是,除非您直接将其发送给它们,否则它链接到的所有组件都不会包含任何 Intent 信息。对于无法确保原始 Intent 得到完全处理的应用程序来说,这可能是所需的行为。

如果您需要单独响应每个 Intent,而原始 Intent 无关紧要,那么您使用 setIntent()。这会丢弃仍在其中的原始 Intent... 并放置新的 Intent 以便如果用户离开(再次),他们将回到同一个地方。

super.onNewIntent()之所以不处理,是因为核心组件类无法判断新的Intent是否比旧的更重要.它所关心的是它一个Intent,而不是它是什么。这就是为什么我们会覆盖这些方法,以便 我们 确定什么是重要的,什么是不重要的。一般的感觉是,像 Activity 这样的基类可以使用我们拥有的任何数据,以它想要的任何方式(除非我们覆盖并以其他方式告诉它)。但是,除非我们明确告诉他们,否则他们不应该(而且通常不能)摆脱我们的数据。 这是一个你真的不想和一些程序员争论的话题。呵呵

希望这会有所帮助。

关于android - 重写 onNewIntent 时是否有任何理由不调用 setIntent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com