为Android设备使用configChanges ="orientation"有什么优缺点?

Pza*_*nno 7 configuration android orientation

我想要android:configChanges="orientation|keyboardHidden"用于我的一些活动,以便我的onCreate不再被调用,但我想我会看到是否有人首先列出了优缺点,因为这个链接说它应该只被使用作为最后的手段.

Yon*_*lan 6

奇怪的是,谷歌并没有真正谈论它背后的推理,但我真的有三个主要原因可以避免使用这种方法:

  • 根据我的经验,一些视图类型(特别是Android 2.1或更低版本上的WebViews和MapViews)如果没有重新创建(例如,缩放按钮位置不正确),可能会在方向更改后表现得相当奇怪.
  • 它会阻止您使用特定方向的布局(例如,请参阅新的市场应用程序的横向视图).
  • 它可以防止您发现应用程序中的错误行为,这些行为与其他类型的原因有关,您的活动可能会被破坏和重新创建(例如,低背景或其他正常的杀戮,而背景).也就是说,如果您的活动可以优雅地处理由于轮换而导致的重新启动,则可能会因为后台查找而处理重启.但是,如果您跳过处理轮换,则在正常测试下,由于背景消除,您可能不会遇到重新启动,直到具有较旧的低内存电话的用户写入错误报告.

最后一个原因是重要原因; 特别是对于较旧的低RAM手机以及姜饼中据称更具侵略性的自动杀戮行为,您的活动需要知道如何在销毁后通过保存状态快速重新创建,无论方向处理如何.一旦你的活动可以处理这些类型的破坏/娱乐,你可能都会设置轮换更改杀死.你可以通过吸收旋转事件获得一些速度(因为你不必回过布局通胀和所有这些),但那就是所有的,在那一点上.

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

根据我的经验,吸收旋转实际上是改善用户体验的一个很好的选择,特别是对于复杂布局的活动,可能需要一些时间来重新创建,但你真的需要仔细测试并确保你的活动即使没有旋转忽略.


dde*_*ele 5

使用这种方法的一个重要原因是它需要您付出很少的努力,并且您的应用程序将在配置更改后继续运行而不会导致崩溃.

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

在我(也许很少)的经历中,我认为不值得努力做所有的管道工作.

"正确"处理这些配置更改需要您进行大量管道处理,如果您必须在屏幕方向更改期间支持进度对话框,则事情会变得更加激烈.

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

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