在一个活动中,如果活动被暂停,然后用一个意图调用,getIntent() 返回旧的

Posted

技术标签:

【中文标题】在一个活动中,如果活动被暂停,然后用一个意图调用,getIntent() 返回旧的【英文标题】:In an activity, if the activity is paused and then invoked with an intent, getIntent() returns the old one 【发布时间】:2015-05-08 20:43:00 【问题描述】:

我有一个活动,它根据启动活动的意图显示一些信息。应用程序图标在没有任何额外信息的情况下启动此活动,并且活动正确显示。应用程序小部件也会启动此活动,但带有一些额外的信息并且被正确处理。在这种情况下,应用程序无法按预期运行:

用户使用主屏幕快捷方式进入活动。 用户使用 home 键将应用程序发送到后台。 用户使用小部件快捷方式进入应用

在这种情况下,onResume() 中的意图是旧的,而不是来自小部件的意图。 我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

这正是onNewIntent()存在的原因:它被称为:

当 Activity 在 Activity 堆栈的顶部而不是正在启动的 Activity 的新实例时重新启动时,将在现有实例上调用 onNewIntent() 并使用用于重新启动它的 Intent .

在接收到新意图之前,Activity 总是会暂停,因此您可以指望onResume() 在此方法之后被调用。

请注意,getIntent() 仍然返回原始 Intent。您可以使用setIntent(Intent) 将其更新为这个新的 Intent。

因此添加如下代码:

@Override
protected void onNewIntent (Intent intent) 
    setIntent(intent);

和/或将您的代码从onResume() 移动到诸如handleIntent() 之类的方法中,并从您的onCreate()onNewIntent() 调用它。

【讨论】:

以上是关于在一个活动中,如果活动被暂停,然后用一个意图调用,getIntent() 返回旧的的主要内容,如果未能解决你的问题,请参考以下文章

替换 SingleTask 活动中的片段

如果显示插页式广告,则在活动中未调用onResume()和onPause()

android方向 - 意图问题(相机)

如何将意图发送到正在运行的服务或后台活动?

活动重新创建意图附加内容为空

如何从我的活动中意图在我的标签栏中分段?