2

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

活动 A 调用活动 B,并完成,将自己从堆栈中移除;活动 B 从活动 A 接收到一个意图,该意图指定要执行的某些操作,当执行这些操作时,用户将看到一条指示它的消息(仍在活动 B 中)。如果用户按下主页按钮,应用程序将进入后台,打电话"onPause",然后"onStop"。一切都按预期工作。

问题是,如果用户将应用程序留在后台几个小时,并尝试再次打开应用程序(几个小时后) ,则onCreate活动 B 中的方法将被调用,其意图与几小时前从活动A。

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

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

查看活动生命周期,似乎应用程序正在被操作系统杀死,所有这些都是有道理的,我真正不明白的是为什么活动 B 以与onCreate以前相同的方法和意图打开。

4

3 回答 3

1

这是 Activity 生命周期中描述的预期行为。

当一个活动开始时,它总是收到一个Intent对象。当您的活动被杀死时,操作系统会保留用于启动活动 B 的意图,并在活动返回“活动”时重新发送。

您的活动将保留状态并根据需要恢复它。根据您的问题描述,我建议使用onStop()so save 到SharedPreferences活动状态和消息,然后onResume()再读回来。在onDestroy()您应该清除首选项以确保新的清洁周期开始。

问候。

于 2012-11-23T21:06:52.487 回答
1

我遇到了同样的问题,我不知道这样做的方式或权利,但我只是Intent在需要时更改了 Extra。

intent.putExtra(SEARCH_EXTRA, false);
setIntent(intent);

所以你的活动不会执行操作,因为它没有收到它想要的东西。

于 2012-11-23T21:31:33.320 回答
1

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

于 2012-11-23T23:08:23.820 回答