2

众所周知,当用户在纵向和横向模式之间切换时,android 会销毁并重新启动 Activity,我们可以通过覆盖onConfigurationChanged()回调来防止这种情况发生。谁能向我解释一下系统销毁和启动活动的实际需要是什么?如果我覆盖有任何副作用onConfigurationChanged()吗?

4

2 回答 2

4

虽然这种行为非常强大,但由于您的应用程序会在运行时自动适应设备的配置,因此有时会令新的 Android 开发人员感到困惑,他们想知道为什么他们的活动被销毁和重新创建。面对这个“问题”,一些开发人员选择自己处理配置更改,在我看来,这是一种短期解决方案,当其他设备出现或应用程序变得更加复杂时,这会使他们的生活变得复杂。自动资源处理是一种非常有效且简单的方法,可以使您的应用程序的用户界面适应各种设备和设备配置。但有时它是有代价的。

参考:http ://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html

于 2012-05-31T13:30:26.630 回答
0

重启Activity的主要目的是因为Android需要改变布局、资源等来适应新的屏幕方向。您可能知道,每个方向(通常)都有自己的应用程序资源。Android 的设计者决定最好简单地重新启动 Activity,因为在更改资源时需要进行大量的返工。

这一点在 Honeycomb 出现Fragment之后尤为重要。根据您的方向,您可以显示一组完全不同的片段和相关的数据集。

我强烈建议不要覆盖onConfigurationChanged(). 相反,请阅读他的答案中提供的链接 HandlerExploit。它展示了如何使用onRetainNonConfigurationInstance().

于 2012-05-31T13:42:19.317 回答