为什么系统在活动进入停止状态时调用onSaveInstanceState()?
由于活动的实例在停止时保持驻留在内存中,并且仅当活动被销毁时其当前状态才会丢失。
因此系统应该在进入 onDestroy()而不是onStop()之前调用onSaveInstanceState()。
不是吗?
答案 0 :(得分:8)
由于无法保证onDestroy()
被调用(通常,仅当您finish()
您的活动时),并且因为onStop()
之后,您的活动无法保证。一旦它不是前台活动,它可能会因各种原因而被销毁。
我总是假设在onPause()
之后,下一个回复可能为onCreate()
,这样,我就不会感到惊讶;)
答案 1 :(得分:3)
onSaveInstanceState
保存片段/活动的视图状态以及自定义实例数据。视图对象可以在onStop
之后销毁,因此必须调用onSaveInstanceState
来保留其状态。
这在the docs for Activity.onSaveInstanceState
中讨论:
默认实现通过在具有id的层次结构中的每个视图上调用
onSaveInstanceState()
并通过保存当前聚焦视图的id(全部)来为您处理大多数UI每实例状态。这是由onRestoreInstanceState(Bundle)
的默认实现恢复的。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能希望调用默认实现,否则请准备保存所有你自己每个观点的状态。
答案 2 :(得分:0)
要保存有关活动状态的其他数据,必须覆盖onSaveInstanceState()回调方法。系统在用户离开您的活动时调用此方法,并将其传递给Bundle对象,该对象将在您的活动意外销毁时保存。如果系统必须稍后重新创建活动实例,它会将相同的Bundle对象传递给onRestoreInstanceState()和onCreate()方法。