是否有人知道在活动中何时使用savedInstanceState包的详尽列表?
我知道它在设备方向改变时使用。但是,当用户强制从Android设置关闭应用程序时似乎没有使用它,但这可能是由于我的代码中的某些内容。
还有哪些其他案例?
要清楚,“used”是指调用onCreate()
时,savedInstanceState包不为null,并且包含我上次调用onSaveInstanceState()
时传入的数据。
答案 0 :(得分:39)
当操作系统强制终止活动时使用它(例如:当您的活动在后台并且另一个任务需要资源时)。发生这种情况时,系统会调用onSaveInstanceState(Bundle outstate)
,您的应用可以在outstate
添加要保存的状态数据。
当用户恢复您的活动时,如果您的活动在上述方案中被终止,则会调用onCreate(Bundle savedInstanceState)
并且savedInstanceState
将为非空。然后,您的应用可以从savedInstanceState
获取数据,并将您的活动状态重新生成用户上次看到它时的状态。
基本上在onCreate
中,当savedInstanceState
为空时,则表示这是您的“新”活动。如果它是非空的(如果您的应用程序将数据保存在onSaveInstanceState(...)
中,则表示需要重新创建活动状态。
答案 1 :(得分:20)
onSaveInstanceState
仅用于存储应用程序生命周期的数据(即暂时)
数据仅保存在内存中,直到应用程序处于活动状态,换句话说,当应用程序关闭时,此数据会丢失,因此在您强行关闭的情况下,不会使用应用程序onSaveInstanceState
。
只有在应用程序处于活动状态时进行操作时才能调用它,例如当您更改屏幕方向时,活动仍然完好无损,因此会调用onSaveInstanceState
。
但是,如果您要永久存储数据,则必须使用SharedPreferences
和SQLite database
。