7

在 Android 中,当屏幕方向发生变化(横向和纵向之间)时,onCreate调用该方法,如果处理不当,当结果过于简单地改变布局并保留所有相同信息时,将重新创建整个活动。

我知道解决这个问题的几种方法,但我对最有效的方法感兴趣。

1)告诉清单我将通过覆盖该onConfigurationChanged()方法并将其留空来处理方向更改。

2)覆盖onSaveInstanceState()并保存此处的数据以重新填充onCreate()

3)覆盖onPause()将创建数据包并将其发送到onSaveInstanceState()

显然,这些都是选项,但是哪一个是更好的做法(小、中、大量数据)

谢谢

4

2 回答 2

13

某些设备配置可能会在运行时更改(例如屏幕方向、键盘可用性和语言)。当发生这样的变化时,Android 会重新启动正在运行的 Activity(onDestroy()被调用,然后被调用onCreate())。

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

但是,您可能会遇到这样一种情况,即重新启动应用程序和恢复大量数据的成本可能会很高,并且会造成糟糕的用户体验。在这种情况下,您还有另外两个选择:

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

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

  2. 自己处理配置更改

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

因此,根据您的数据操作和应用程序的用户体验海岸,您可以选择最适合您的..

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

于 2012-01-25T04:40:07.597 回答
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"
于 2021-03-26T07:37:25.480 回答