在屏幕上更改我的android应用程序布局的方向

在屏幕上更改我的android应用程序布局的方向,android,Android,当屏幕方向发生变化时,我多次阅读到,为了保存编辑文本和文本视图的数据或任何单选按钮,我必须使用onSaveInstanceState()方法 但当我改变屏幕方向时,编辑文本、文本视图和单选按钮的数据不会被删除 那么使用onSaveInstanceState()方法的主要目的是什么呢。如果安全地保存了我的数据,为什么我们必须使用它?默认情况下可能会处理某些视图/属性。你可以浏览这些文档,找出到底是哪些文档以及它们是如何被处理的,但是 我建议您对这些保存/加载进行手动控制,以确保事情按您希望的方式处

当屏幕方向发生变化时,我多次阅读到,为了保存编辑文本和文本视图的数据或任何单选按钮,我必须使用
onSaveInstanceState()
方法

但当我改变屏幕方向时,编辑文本、文本视图和单选按钮的数据不会被删除


那么使用
onSaveInstanceState()
方法的主要目的是什么呢。如果安全地保存了我的数据,为什么我们必须使用它?

默认情况下可能会处理某些视图/属性。你可以浏览这些文档,找出到底是哪些文档以及它们是如何被处理的,但是

我建议您对这些保存/加载进行手动控制,以确保事情按您希望的方式处理,以避免出现边缘案例错误,并在需要时保留某些设置/属性/状态

这实际上取决于活动/片段/布局/视图/偏好等的复杂性和内容,如果你真的需要记住几分钟前的状态


此方法在活动可能被终止之前调用,以便在将来某个时间它返回时可以恢复其状态

不要将此方法与活动生命周期回调(如onPause)混淆,onPause总是在将活动置于后台或其销毁过程中调用,或onStop在销毁之前调用。调用onPause和onStop而不是此方法的一个示例是当用户从活动B导航回活动a时:不需要在B上调用onSaveInstanceState,因为该特定实例将永远不会恢复,因此系统避免调用它。调用onPause而不是onSaveInstanceState的一个示例是在活动A之前启动活动B:如果在活动A的生存期内未终止,系统可能会避免在活动A上调用onSaveInstanceState,因为A的用户界面状态将保持不变

当活动从以前保存的状态重新初始化时,在onStart()之后调用此方法

大多数实现将只使用onCreate(Bundle)来恢复它们的状态,但有时在完成所有初始化之后在这里执行此操作或允许子类决定是否使用默认实现是很方便的。此方法的默认实现执行以前由onSaveInstanceState(捆绑包)冻结的任何视图状态的恢复

  • 关于使用这对方法对视图的默认处理:

    默认实现通过在层次结构中具有id的每个视图上调用View.onSaveInstanceState(),并通过保存当前关注的视图的id(所有视图都由onRestoreInstanceState的默认实现还原),来为您处理大多数每个实例的UI状态。如果重写此方法以保存每个视图未捕获的其他信息,则可能需要调用默认实现,否则请准备好自己保存每个视图的所有状态


因此,建议使用onsaveinstancestate()和restore函数?即使默认情况下我的数据被保留。对吗?就像我说的,这取决于你的用例。如果您需要保存状态,请自行保存,以确保状态正确。您不能总是依赖默认值,因为它们在不同的API版本中可能会有不同的行为。我会在我的答案中编辑更多信息。请注意关于何时不会调用savedinstancestate(…)的部分。这很容易被忽略,以后也很难找到。