【问题标题】:What are the pros and cons of using configChanges="orientation" for android devices?对 android 设备使用 configChanges="orientation" 的优缺点是什么?
【发布时间】:2011-05-31 04:09:46
【问题描述】:

我想在我的一些活动中使用android:configChanges="orientation|keyboardHidden",这样我的 onCreate 就不会再次被调用,但我想我会先看看是否有人列出了优缺点,因为this link说它只能作为最后的手段。

【问题讨论】:

    标签: android configuration orientation


    【解决方案1】:

    使用这种方法的一大优点是,它只需要您付出很少的努力,并且您的应用可以在配置更改后继续存在而不会导致崩溃。

    小缺点是使用配置特定的资源(横向或纵向)不会自动应用。

    根据我(也许很少)的经验,我认为花这么多精力做所有的管道并不值得。

    “正确”处理这些配置更改需要您进行大量工作,如果您必须在屏幕方向更改期间支持进度对话框,事情会变得更加戏剧化。

    虽然大多数人会通过更改清单来选择快速修复,并使用 android:configChanges=”keyboardHidden|orientation” 配置他们的活动,但我认为重要的是要意识到还有其他选择。

    它需要更多代码,但它确实能让您更好地了解整个系统的工作原理。

    【讨论】:

      【解决方案2】:

      很奇怪,Google 并没有真正谈论其背后的原因,但我确实可以想到三个主要原因来避免使用这种方法:

      • 根据我的经验,如果没有重新创建某些视图类型(尤其是 Android 2.1 或更低版本上的 WebView 和 MapView),它们在方向更改后可能会表现得相当奇怪(例如,缩放按钮位置错误)。
      • 它会阻止您使用特定方向的布局(例如,请参阅新的 Market 应用的横向视图)。
      • 它可以防止您从应用程序中发现与您的 Activity 可能被销毁和重新创建的其他类型原因相关的错误行为(例如,在后台运行时内存不足或其他正常终止)。也就是说,如果您的 Activity 可以正常处理由于旋转而重新启动,它可能可以处理由于后台杀戮而重新启动。但是,如果您跳过处理轮换,则在正常测试下,您可能不会因为后台杀戮而重新启动,直到使用较旧的低内存手机的用户写入错误报告。

      最后一个原因是大的;特别是对于较旧的低 RAM 手机以及 Gingerbread 中所谓的更具攻击性的自动杀戮行为,您的活动需要知道如何在破坏后通过保存其状态来快速重新创建,而不管方向处理如何。一旦你的活动可以处理这些破坏/娱乐,你可能已经准备好轮换杀戮了。您可以通过吸收旋转事件来获得一些速度(因为您不必通过布局膨胀等返回),但这就是全部。

      如果您确实决定吞下旋转,我强烈建议您始终使用模拟器或设备并选中 Development.apk 的“立即销毁活动”选项,然后确保切换应用程序或通过任务堆栈支持仍然正常工作.

      根据我的经验,吸收旋转实际上是改善用户体验的好选择,尤其是对于布局复杂且可能需要一些时间重新创建的活动,但您确实需要仔细并有效地进行测试,以确保您的活动仍然即使没有旋转忽略也可以工作。

      【讨论】:

      • 关于WebView,这是有问题的,因为如果你在加载时改变方向,它会重新开始加载。正如我所读到的,你无法恢复它的状态(它甚至写在文档中)
      猜你喜欢
      • 2013-06-30
      • 2017-07-26
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2010-09-06
      • 2015-01-30
      • 2011-11-23
      • 2017-05-10
      相关资源
      最近更新 更多