在 Android 中,当屏幕方向发生变化(在横向和纵向之间)时,将调用 onCreate
方法,如果处理不当,将在结果过于简单地更改布局时重新创建整个 Activity 并保留所有相同的信息。
我知道有几种方法可以解决这个问题,但我对最有效的方法感兴趣。
1) 告诉 list 我将通过覆盖 onConfigurationChanged()
方法并将其留空来处理方向更改。
2) 重写 onSaveInstanceState()
并将数据保存在此处以在 onCreate()
中重新填充
3) 重写 onPause()
将创建数据包并将其发送到 onSaveInstanceState()
很明显,这些都是选项,但哪个是更好的做法(小、中、大数据量)
谢谢
最佳答案
某些设备配置可能会在运行时发生变化(例如屏幕方向、键盘可用性和语言)。发生此类更改时,Android 会重新启动正在运行的 Activity(调用 onDestroy()
,然后调用 onCreate()
)。
- 要正确处理重启,重要的是您的 Activity
通过正常的 Activity 生命周期恢复其先前的状态,在
哪个 Android 在销毁你的之前调用了
onSaveInstanceState()
Activity ,以便您可以保存有关应用程序状态的数据。你 然后可以在onCreate()
期间恢复状态或onRestoreInstanceState()
。
但是,您可能会遇到这样一种情况,即重新启动应用程序和恢复大量数据的成本可能很高,并且会造成糟糕的用户体验。在这种情况下,您还有另外两个选择:
Retain an object during a configuration change
允许您的 Activity 在配置更改时重新启动,但将有状态对象携带到 Activity 的新实例。
Handle the configuration change yourself
防止系统在某些配置更改期间重新启动您的 Activity,但在配置确实更改时收到回调,以便您可以根据需要手动更新您的 Activity。
因此,根据您的数据操作和应用程序的用户体验海岸,您可以选择最适合您的..
编辑:根据您对更改布局的需要,我认为您必须使用 onConfigurationChanged()
并在其中进行更改。
关于Android:高效的屏幕旋转处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8997822/