Android中的配置更改以及在实例状态下保存哪些变量
我试图更好地理解配置更改和实例状态 现在我知道,旋转屏幕之类的操作被视为配置更改,它会破坏并重新创建活动。有时这意味着如果您不小心,可能会丢失值(例如,如果您有一个数字列表,当您旋转屏幕时,该列表被重置为所有0) 通常有一些方法可以用于保存和还原值,例如Android中的配置更改以及在实例状态下保存哪些变量,android,configuration,instance,Android,Configuration,Instance,我试图更好地理解配置更改和实例状态 现在我知道,旋转屏幕之类的操作被视为配置更改,它会破坏并重新创建活动。有时这意味着如果您不小心,可能会丢失值(例如,如果您有一个数字列表,当您旋转屏幕时,该列表被重置为所有0) 通常有一些方法可以用于保存和还原值,例如onSaveInstanceState,或onRestoreInstanceState,或者检查onCreate方法中的savedInstanceState是否为空,等等,以便在发生更改时不会丢失任何内容 我的问题是: 是否需要考虑多种类型的配置
onSaveInstanceState
,或onRestoreInstanceState
,或者检查onCreate
方法中的savedInstanceState
是否为空,等等,以便在发生更改时不会丢失任何内容
我的问题是:
onSaveInstanceState
中,然后在onRestoreInstanceState
中重新应用它们,这是一种良好的做法吗Bundle
中保存一些面向用户的字符串,并在新活动中简单地使用该字符串,而不是再次调用getString()
,那么您将拥有旧语言的值
许多开发人员只考虑方向的改变。通常,如果您处理方向更改,所有其他配置更改都将“免费”处理。但是,情况并非总是如此,这就是为什么你需要仔细考虑的原因
如何知道应该将哪些变量保存到实例状态变量中,以及在发生配置更改时自动保留哪些变量
“自动保存”的主要内容包括:
- 用于启动活动的
意图
- 用户界面小部件中的用户可变状态(例如,
)中的文本。。。假设您没有覆盖EditText
或链接到超类实现onSaveInstanceState()
- 这是我在配置更改过程中需要保留的内容,还是只是在新活动中重建内容的缓存
- 这是我可以合理地放入已保存实例状态
包中的东西,还是它的大小(例如
)或数据类型(例如位图
)无法保持在该状态?对于这些,除了保存的实例状态套接字
(保留片段、持久化数据等)之外,还需要采用其他技术Bundle
ImageView
中。这不是“用户可变状态”,因此内置的onSaveInstanceState()
实现会忽略它,就像它忽略可见性、启用/禁用等内容一样。如果用户可以自己更改状态(例如,选中一个复选框,滑动一个SeekBar
),那么这种状态很有可能由Android处理(t