当屏幕方向发生变化时,我已多次阅读,为了保存编辑文本和文本视图或任何单选按钮的数据,我必须使用onSaveInstanceState()
方法。
但是当我更改屏幕方向时,编辑文本,文本视图和单选按钮的数据不会被删除。
那么使用onSaveInstanceState()
方法的主要目的是什么?如果我的数据安全保存,为什么还要使用它呢?
答案 0 :(得分:0)
默认情况下可能会处理某些视图/属性。你可以通过文档来确切地找出哪些以及它们如何被处理但是......
我建议您手动控制这些保存/加载,以确保按照您希望的方式处理事情以避免边缘情况错误,这样您就可以在需要时保留某些设置/属性/状态
这实际上取决于你的活动/片段/布局/视图/偏好等等的复杂性和内容,如果你真的需要记住状态的事情,不久之前。
在活动被杀之前调用此方法,以便在将来某个时间返回时可以恢复其状态。
不要将此方法与活动生命周期回调混淆,例如onPause,当活动被放置在后台或正在销毁时,或者在销毁之前调用onStop时,它总是被调用。调用onPause和onStop时的一个示例,而不是此方法是当用户从活动B导航回活动A时:不需要在B上调用onSaveInstanceState,因为该特定实例永远不会被恢复,因此系统避免调用它。调用onPause而不是onSaveInstanceState的示例是在活动A前面启动活动B时:如果在B的生命周期内没有被杀死,系统可以避免在活动A上调用onSaveInstanceState,因为A的用户界面的状态将保持不变。
当从先前保存的状态重新初始化活动时,在onStart()之后调用此方法。
大多数实现只是使用onCreate(Bundle)来恢复它们的状态,但是在完成所有初始化之后有时可以方便地执行此操作,或者允许子类决定是否使用默认实现。此方法的默认实现执行先前已被onSaveInstanceState(Bundle)冻结的任何视图状态的恢复。
默认实现通过在具有id的层次结构中的每个视图上调用View.onSaveInstanceState()并保存当前焦点视图的id(全部为这是由onRestoreInstanceState的默认实现恢复的。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能希望调用默认实现,否则请准备好自己保存每个视图的所有状态。