在我的应用程序中,我具有以下结构:
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/