【问题标题】:Android: Efficient Screen Rotation HandlingAndroid:高效的屏幕旋转处理
【发布时间】:2012-01-25 04:29:56
【问题描述】:

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

我知道一些解决此问题的方法,但我对最有效的方法感兴趣。

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

2) 覆盖onSaveInstanceState() 并将数据保存在此处以便在onCreate() 中重新填充

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

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

谢谢

【问题讨论】:

  • 一种方法是您可以停止重新创建 Activity 并在纵向和横向布局之间切换。检查我的答案here
  • 虽然这种方式看起来效果很好,但我希望能够通过使用res/layout-land 文件夹来利用布局中的自动更改。当然,除非对于一个简单的活动来说开销太大。
  • 嗯,这会自动改变它的布局,你只需要改变代码中的内容视图就可以了。

标签: android rotation screen screen-orientation orientation-changes


【解决方案1】:

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

  • 要正确处理重新启动,重要的是您的活动 通过正常的 Activity 生命周期恢复其先前的状态,在 在它破坏你的Android之前,它会调用onSaveInstanceState() 活动,以便您可以保存有关应用程序状态的数据。你 然后可以在onCreate() 期间恢复状态或 onRestoreInstanceState()

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

  1. Retain an object during a configuration change

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

  2. Handle the configuration change yourself

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

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

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

【讨论】:

  • 这如何应用于片段?
【解决方案2】:
//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-11-16
    • 2012-10-04
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多