Android Activity 在进入后台后两次收到相同的 Intent

标签 android android-intent android-activity

在我的应用程序中,我具有以下结构:

Activity A 调用 Activity B,并完成,并将其自身从堆栈中删除; Activity B 从 Activity A 接收一个 Intent ,指定要执行的某些操作,执行这些操作时,用户将看到一条指示它的消息(仍在 Activity B 中)。如果用户按下主页按钮,应用程序将转到后台,调用“onPause”,然后调用“onStop”。一切都按预期进行。

问题是,如果用户将应用程序留在后台几个小时,并尝试再次打开应用程序(几个小时后),则将调用 Activity B 中的 onCreate 方法与几个小时前从 Activity A 收到的 Intent 完全相同。

(如果用户几分钟后返回应用程序,他将看到 Activity B,就像他离开时一样)

我想要的是,在这种情况下,我的应用程序将打开 Activity A 而不是 Activity B,或者 Activity B,但会显示用户离开时屏幕上显示的消息。

从 Activity 生命周期来看,应用程序似乎被操作系统杀死了,所有这些都是有道理的,我真正不明白的是为什么 Activity B 使用 onCreate 方法打开,并且与之前的 Intent 相同。

最佳答案

使用onSaveInstanceState()记录ActivityB的状态。 Android 会在终止进程之前调用此函数。当用户返回到应用程序时,它将重新创建进程,然后重新创建 Activity 堆栈顶部的任何 Activity (在您的情况下为 ActivityB)。当它这样做时,它将把保存的实例状态作为 onCreate() 中的参数传递给 Activity 。称呼。您应该能够在其中放置一些内容,以便您的 ActivityB 可以知道它在进程终止/重新启动后正在重新创建。在这种情况下,ActivityB 可以再次向用户显示消息(必须将其保存在 onSaveInstanceState() 方法中),或者可以将用户重定向回 ActivityA,以便他可以重新开始。

关于Android Activity 在进入后台后两次收到相同的 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535349/

相关文章:

android - killBackgroundProcesses 不工作

android - 单击通知打开错误的 Activity

android - Gradle 找不到插件

java - 在 Android 中使用 intent 共享图像文件时无法打开文件进行共享?

android - 标记为 "SingleTask"的 Activity 已提前

java - 创建 Magento 站点的 native Android 应用程序

android - 如何以编程方式打开 Google Play 商店的 "My account"

java - 多个字符串到 Arraylist

php - 上传文件 - Android 到 Google App Engine (PHP)

java - android开发人员警报对话框+ ListView 功能