安卓:高效的屏幕旋转处理

7
在Android中,当屏幕方向改变(横向和纵向之间)时,将调用onCreate方法,如果处理不当,将重新创建整个活动,而结果只是简单地更改布局并保留所有相同的信息。
我知道一些解决方法,但我对最有效的方法感兴趣。
1)通过覆盖onConfigurationChanged()方法并将其保留为空来告诉清单我将处理方向更改。
2)重写onSaveInstanceState()并在此处保存数据以在onCreate()中重新填充。
3)覆盖onPause(),它将创建一个数据包并将其发送到onSaveInstanceState()
显然,这些都是选项,但哪个是更好的实践(小、中、大量的数据)
谢谢

1
一种方法是可以停止重新创建Activity,只需在纵向和横向布局之间切换即可。查看我的答案这里 - Lalit Poptani
虽然这种方式似乎很好用,但我想要能够利用res/layout-land文件夹中的自动布局更改。当然,除非对于一个简单的活动来说这会带来太多的开销。 - Sababado
好的,这将自动更改其布局,您只需要在代码中更改contentview即可。 - Lalit Poptani
2个回答

13

一些设备配置可以在运行时更改(例如屏幕方向、键盘可用性和语言)。当出现这种变化时,Android会重启正在运行的Activity(onDestroy()被调用,然后调用onCreate())。

  • 为了正确处理重启,重要的是您的Activity通过正常的Activity生命周期恢复其先前的状态,在其中Android在销毁您的Activity之前调用onSaveInstanceState(),以便您可以保存有关应用程序状态的数据。然后您可以在onCreate()onRestoreInstanceState()期间恢复状态。

但是,在某些情况下,重新启动应用程序并恢复大量数据可能代价高昂,并且会创建糟糕的用户体验。在这种情况下,您还有两个选择:

  1. 在配置更改期间保留对象

    允许您的活动在配置更改时重新启动,但将具有有状态的对象传递到您的活动的新实例中。

  2. 自己处理配置更改

    防止系统在某些配置更改期间重新启动您的活动,但在配置确实改变时接收回调,以便您可以根据需要手动更新您的活动。

因此,根据您的数据操作和应用程序用户体验的成本,您可以选择最适合您的选项。

编辑:根据您只需更改布局的需要,我认为您需要使用onConfigurationChanged()并在其中进行更改。


1
这如何适用于碎片? - Andrew Orobator

0
//by changing the orientation if your layout not disturb in design just data destroyed
 //then use the below attribute in manifest in activity you want to do


   android:configChanges="orientation|screenSize|layoutDirection"

//but your whole screen design disturb then turn off orientation by using this

  android:screenOrientation="portrait"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接