5

为什么Activity进入停止状态时系统会调用onSaveInstanceState()?

由于活动的实例在停止时一直驻留在内存中,并且只有在活动被销毁时才会丢失其当前状态。

所以系统应该在进入或进入onDestroy() 之前调用 onSaveInstanceState() 而不是 onStop()

不是吗?

4

3 回答 3

9

因为onDestroy()不保证会被调用(通常,仅当finish()您进行活动时)并且因为在 之后onStop(),不保证您的活动会保留。一旦它不是前台活动,它可能会由于多种原因而被破坏。

我总是假设,之后onPause(),下一个回调可能onCreate(),那样,我永远不会感到惊讶;)

于 2013-11-05T16:45:49.037 回答
3

onSaveInstanceState保存 Fragment/Activity 的视图状态以及自定义实例数据。视图对象可以并且将在 之后被销毁onStop,因此onSaveInstanceState必须调用以保留它们的状态。

这在以下文档中进行Activity.onSaveInstanceState了讨论:

默认实现通过调用onSaveInstanceState()层次结构中具有 id 的每个视图并保存当前聚焦视图的 id(所有这些都由onRestoreInstanceState(Bundle). 如果您重写此方法以保存每个单独视图未捕获的附加信息,您可能希望调用默认实现,否则请准备好自己保存每个视图的所有状态。

于 2013-11-05T16:41:07.077 回答
0

要保存有关活动状态的其他数据,您必须重写 onSaveInstanceState() 回调方法。当用户离开您的活动时,系统会调用此方法,并将 Bundle 对象传递给它,该对象将在您的活动被意外销毁时保存。如果系统必须稍后重新创建活动实例,它会将相同的 Bundle 对象传递给 onRestoreInstanceState() 和 onCreate() 方法。

于 2015-03-29T18:46:31.590 回答