【问题标题】:Where should I be using getIntent() in the Android lifecycle在 Android 生命周期中我应该在哪里使用 getIntent()
【发布时间】:2018-11-21 22:57:21
【问题描述】:

我的应用程序中有一个错误,我认为我知道如何解决,但现在我想了更多关于发生的事情,我不确定我是否知道修复。

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

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

这是正在发生的事情:

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

此时我认为这个错误是因为我正在阅读onCreate() 中的意图,然后显示和处理它。我的想法是,由于应用程序已经在运行,onCreate() 不会在应用程序第二次显示时被调用,因为我们在 onResume() 跳转到生命周期。

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

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

这怎么可能,因为应用程序仍在运行,肯定onCreate() 仍然不会被调用!

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

【问题讨论】:

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


【解决方案1】:

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

启动模式在这里很重要。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多