【发布时间】:2021-10-14 19:59:46
【问题描述】:
我阅读的所有资料都提到了几个案例,并以“其他几个案例”结束。在视图/活动中调用 onSaveInstanceState 方法的所有情况是什么?
【问题讨论】:
我阅读的所有资料都提到了几个案例,并以“其他几个案例”结束。在视图/活动中调用 onSaveInstanceState 方法的所有情况是什么?
【问题讨论】:
onSaveInstanceState() 将默认为一个视图调用,如果它有一个 id。
google 说:“默认实现通过在层次结构中具有 id 的每个视图上调用 onSaveInstanceState() 来为您处理大部分 UI 实例状态。
更多信息here。
【讨论】:
只要有活动的软杀。即当方向改变或由于内存不足而被android杀死时。
当用户故意离开活动时,它不会被调用。
【讨论】:
doc 说
这个方法在一个activity可能被杀死之前被调用,这样当它在未来某个时间回来时它可以恢复它的状态。
【讨论】:
还要注意onSaveInstanceState可以在onCreate之后直接在片段上调用(onCreateView、onActivityCreated、onStart和onResume不会被调用),如果片段附加到一个活动但未显示,然后销毁。因此,您需要确保您在onSaveInstanceState 中引用的所有内容都在onCreate 中初始化,否则您将面临NullPointerException 的风险。
【讨论】:
根据doc
如果用户与活动交互并按下返回按钮或 如果调用了活动的完成()方法,则活动是 从当前活动堆栈中删除并回收。在这种情况下 没有要保存的实例状态和 onSaveInstanceState() 方法没有被调用。
如果用户与 Activity 交互并按下 Home 按钮, 必须保存活动实例状态。 onSaveInstanceState() 方法被调用。如果用户重新启动应用程序,它将恢复 或重新启动上次运行的活动。如果它重新启动活动它 为包提供保存数据到 onRestoreInstanceState() 和 onCreate() 方法。
如果你覆盖 onSaveInstanceState() 和 onRestoreInstanceState() 你 应该调用它的超级实现,因为默认视图 Android 通过调用 View.onSaveInstanceState 来存储他们的数据 来自活动的 onSaveInstanceState() 方法。例如 EditText 通过该方法的默认调用存储其内容。
【讨论】:
当用户按下“返回”按钮时,此方法没有调用,这是其中一种情况..
【讨论】:
onSaveInstanceState 在活动无法查看时被调用。就像当你按下 home 键时,onSaveInstanceState 被调用。
【讨论】:
来自here:答案是onSaveInstanceState() 被调用,无论您的应用进程是否被杀死。所以在所有这些场景中,onSaveInstanceState() 被调用:
普通背景场景
onSaveInstanceState()
进程杀死后台场景
onSaveInstanceState()
onRestoreInstanceState() 和onCreate()(带有保存的实例状态包)配置变更场景
onSaveInstanceState()
onRestoreInstanceState() 和onCreate()(带有保存的实例状态包)区别在于是否调用onCreate()/onRestoreInstanceState()。在进程终止和配置场景中,它们被调用。在正常情况下,不需要重新创建活动,也不需要调用。
请注意,onSaveInstanceState() 在您的活动进入后台时调用,而不是在应用程序进程即将被终止时调用。这是因为在您的应用程序进程被杀死的情况下,系统的资源相当有限,因此不是花时间在 RAM 中存储键/值对的好时机。
【讨论】: