众所周知,当用户在纵向和横向模式之间切换时,android会破坏并重新启动一个Activity,我们可以通过覆盖onConfigurationChanged()
回调来阻止这种模式。任何人都可以向我解释一下系统破坏和启动活动的实际需求是什么?如果我覆盖onConfigurationChanged()
,是否有任何副作用?
答案 0 :(得分:4)
虽然这种行为非常强大,但您的应用程序会适应 在运行时自动到设备的配置,它是 有时会让新的Android开发人员感到困惑,他们想知道为什 活动被破坏并重新创建。面对这个“问题”,一些 开发人员选择自己处理配置更改, 在我看来,短期解决方案会使他们的生活复杂化 当其他设备出现或应用程序变得更多时 复杂。自动资源处理非常高效和简单 使应用程序的用户界面适应各种设备的方法 设备配置。它有时会付出代价。
参考:http://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html
答案 1 :(得分:0)
重新启动Activity的主要目的是因为Android需要更改布局,资源等以适应新的屏幕方向。如您所知,每个方向(通常)都有自己的Application Resources。 Android的设计者决定最好只是重新启动Activity,因为在更改资源时需要做很多工作。
在Honeycomb出现Fragment s之后,这一点尤其重要。根据您的方向,您可以显示完全不同的片段集和相关的数据集。
我强烈建议不要覆盖onConfigurationChanged()
。相反,请阅读他的答案中提供的HandlerExploit链接。它展示了如何使用onRetainNonConfigurationInstance()
更有效地处理方向更改。