我应该在Android生命周期的哪里使用getIntent()

时间:2018-11-21 22:57:21

标签: android android-intent android-activity android-lifecycle

我的应用程序中有一个bug,我以为我知道该如何解决,但是现在我对所发生的事情有了更多的思考,我不确定我是否知道该修复程序。

我的应用程序接收来自调用第三方应用程序的传入意图作为字符串。该字符串可以作为SEND意图或VIEW意图发送。

除非应用程序已在运行,否则所有这些都可以正常工作

正在发生的事情:

  1. 我的应用未运行(未在运行的应用视图中列出)
  2. 在另一个(第三方)应用程序中单击共享,然后选择我的应用程序以接收共享文本(text1)。
  3. 我的应用程序打开,并按预期显示(并处理)文本。
  4. 用户切换回第三方应用程序并共享一些不同的文本(text2),然后选择我的应用程序以接收此新文本。
  5. 我的应用程序打开,但仍显示原始文本(text1)。

在这一点上,我认为该错误是因为我正在读取onCreate()中的意图,然后显示和处理它。我的想法是,当我们在onCreate()进入生命周期时,第二次显示该应用程序时,该应用程序已经在运行,onResume()没有被调用。

但是,如果我继续进行以下测试:

  1. 在不退出我的应用程序的情况下,用户再次切换回第三方应用程序,并再次与我的应用程序共享同一段第二文本(text2)。
  2. 我的应用程序再次显示,但是这次正确显示并处理了第二个文本。

怎么可能,因为该应用仍在运行,所以肯定不会调用onCreate()

我认为解决方法只是将getIntent()调用移至onResume()(或onStart()吗?),但是现在我不确定。这是对的事吗?

1 个答案:

答案 0 :(得分:1)

问题的核心是,当第二个Activity被解雇时,您的Intent已经在活动堆栈的顶部。

启动模式在这里很重要。

您可以做的是,将launchMode设置为singleTop,然后在onNewIntent()方法中获得意图。

这是处理此类情况的好方法。请阅读上面的链接,它将使事情变得很清楚。