Android设备使用configChanges =“orientation”有什么优点和缺点?

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

Solutions Collecting From Web of "Android设备使用configChanges =“orientation”有什么优点和缺点?"

使用这种方法的一个重要的临界点是,它只需要很less的努力,而且你的应用程序将在configuration更改的情况下继续运行,而不会使用崩溃。

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

在我(也许很less)的经历中,我认为完成所有的pipe道工作并不值得。

如果在屏幕方向更改期间必须支持进度对话框,则“正确”处理这些configuration更改需要大量的pipe道工作,而事情会变得更加剧烈。

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

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

Google并没有更多地谈论它背后的推理,这很奇怪,但我可以想到的三个主要原因是为了避免使用这种方法:

  • 根据我的经验,如果没有重新创build方向更改(例如缩放button错位),某些视图types(特别是Android 2.1或更低版本的WebView和MapView)在方向更改后可能会performance得exception怪异。
  • 它阻止您使用方向特定的布局(例如,请参阅新的市场应用程序的横向视图)。
  • 它可以防止您从您的应用程序发现有关其他types的原因您的活动可能会被破坏和重新创build(例如,低内存或其他正常的杀死,而后台)。 也就是说,如果您的活动可以优雅地处理由于轮换而导致的重新启动,则可能会由于后台处理而处理重新启动。 但是,如果您跳过处理循环,则在正常testing中,由于后台查杀可能不会遇到重新启动,直到具有较旧的低存储电话的用户写入缺陷报告为止。

最后的原因是大的; 特别是对于老式的低内存手机,以及Gingerbread中更具攻击性的自动开销行为,您的活动需要知道如何通过保存其状态来快速重新创build,而不pipe方向如何处理。 而且一旦你的活动可以处理这些破坏/娱乐,你可能都会因为轮换而杀死。 你可以通过吸收旋转事件来获得一些速度(因为你不必回过布局通货膨胀等等),但是这一切都是在这一点上。

如果你决定吞下轮换,我强烈build议你总是使用一个模拟器或设备,并选中Development.apk的“立即销毁活动”选项,然后确保切换应用程序或通过任务堆栈的支持仍然正常工作。

根据我的经验,吸收旋转对于改善用户体验实际上是一个很好的select,特别是对于复杂布局的活动,可能需要一些时间才能重新创build,但是您确实需要仔细testing并确保您的活动仍然可以正常工作旋转忽略。