我应该在 Android 生命周期中的什么地方使用 getIntent()

Where should I be using getIntent() in the Android lifecycle

我的应用程序中有一个错误,我认为我知道如何解决,但现在我对正在发生的事情进行了更多思考,我不确定我是否知道修复方法。

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

除非应用程序已经 运行...

,否则一切正常

这是正在发生的事情:

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

此时我认为这个错误是因为我正在阅读onCreate()中的意图,然后显示和处理它。我的想法是,由于该应用程序已经 运行 当我们在 onResume().

进入生命周期时第二次显示该应用程序时,不会调用 onCreate()

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

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

怎么会这样呢,app还是运行,肯定onCreate()还是叫不出来!

我认为修复只是将 getIntent() 调用移动到 onResume()(或 onStart()?),但现在我对此不确定。这是正确的做法吗?

问题的核心是,当第二个 Intent 被触发时,您的 Activity 已经在 activity 堆栈的顶部。

启动模式在这里很重要。

你可以做的是,将 launchMode 设置为 singleTop,然后在 onNewIntent() 方法中获取 intent。

这是处理此类情况的好方法。请阅读上面的link,它会让事情变得非常清楚。