26

有谁知道在活动中何时使用 savedInstanceState 包的详尽列表?

我知道它在设备方向改变时使用。但是,当用户从 Android 设置中强制关闭应用程序时,它似乎没有被使用,但这可能是由于我的代码中的某些内容。

还有哪些案例?

需要明确的是,“使用”是指onCreate()调用时,savedInstanceState 包不为空,并且包含我上次onSaveInstanceState()调用时传递给它的数据。

4

2 回答 2

40

它在 Activity 被操作系统强制终止时使用(例如:当您的 Activity 在后台并且另一个任务需要资源时)。发生这种情况时,onSaveInstanceState(Bundle outstate)将被调用,并由您的应用添加您想要保存的任何状态数据outstate

当用户恢复您的 Activity 时,如果您的 Activity 在上述场景中终止,则会被onCreate(Bundle savedInstanceState)调用并且将为非 null。savedInstanceState然后,您的应用程序可以从中获取数据savedInstanceState并将 Activity 的状态重新生成为用户上次看到它时的状态。

基本上onCreate,当savedInstanceState为空时,这意味着这是您的 Activity 的“新”启动。当它不为空时(如果您的应用程序将数据保存在 中onSaveInstanceState(...),则意味着需要重新创建 Activity 状态。

于 2012-03-23T21:48:35.833 回答
20

onSaveInstanceState仅用于存储应用程序生命周期的数据(即临时)

数据仅在应用程序处于活动状态之前保存在内存中,换句话说,当应用程序关闭时,这些数据会丢失,因此在您强制关闭应用程序的情况下,onSaveInstanceState不会使用该应用程序。

它只能在您在应用程序还活着的情况下进行操作时调用,例如,当您更改屏幕方向时,活动仍然完好无损,因此onSaveInstanceState被调用。

但是,如果您想永久存储数据,则必须使用SharedPreferencesSQLite database.

于 2012-03-23T21:58:47.547 回答