Java 旋转仿真器时,如何阻止活动被破坏?

Java 旋转仿真器时,如何阻止活动被破坏?,java,android,android-activity,Java,Android,Android Activity,我目前有两个活动:MainActivity和DisplayActivity。当我运行应用程序并旋转仿真器时,活动会被破坏。 如何确保在旋转模拟器时我的活动不会被破坏?您可以使用android:configChanges=“orientation | screenSize”执行此操作 然而,我强烈反对这样做,除非你知道自己在做什么。请记住,Android允许您为纵向和横向指定不同的布局。Android决定在首次创建活动时使用哪个布局(或者更准确地说,当您调用setContentView(),这通常

我目前有两个活动:MainActivity和DisplayActivity。当我运行应用程序并旋转仿真器时,活动会被破坏。
如何确保在旋转模拟器时我的活动不会被破坏?

您可以使用android:configChanges=“orientation | screenSize”执行此操作

然而,我强烈反对这样做,除非你知道自己在做什么。请记住,Android允许您为纵向和横向指定不同的布局。Android决定在首次创建活动时使用哪个布局(或者更准确地说,当您调用
setContentView()
,这通常是在活动的
onCreate()
中执行的),如果您覆盖方向更改的默认行为,则Android系统将不会为您加载正确的布局;你必须自己实现这一点。可能还有其他一些我不知道的事情正在发生,如果你不亲自处理,可能会造成问题


这意味着处理方向更改的首选方法是实现
onSaveInstanceState()
在活动被销毁时存储任何状态,并在活动重新启动时恢复
onCreate()
中的状态。有关更多详细信息,请参阅。

您可以使用android:configChanges=“orientation | screenSize”执行此操作

然而,我强烈反对这样做,除非你知道自己在做什么。请记住,Android允许您为纵向和横向指定不同的布局。Android决定在首次创建活动时使用哪个布局(或者更准确地说,当您调用
setContentView()
,这通常是在活动的
onCreate()
中执行的),如果您覆盖方向更改的默认行为,则Android系统将不会为您加载正确的布局;你必须自己实现这一点。可能还有其他一些我不知道的事情正在发生,如果你不亲自处理,可能会造成问题


这意味着处理方向更改的首选方法是实现
onSaveInstanceState()
在活动被销毁时存储任何状态,并在活动重新启动时恢复
onCreate()
中的状态。有关更多详细信息,请参阅。

默认情况下,当方向或语言发生重大变化时,android将销毁并重新创建您的活动。这其实很好。如果操作正确,活动的状态将被保存和还原,因此用户甚至不知道活动已重新创建。在这样做的过程中,Android会自动应用任何可能已更改的资源,例如仅适用于横向模式的布局


如果您真的想禁用此功能并手动更新任何可能已更改或保留在旧资源上的资源,请继续在所需活动中向清单中添加
android:configChanges=“orientation | screenSize”
。方向更改时将不再重新创建它

默认情况下,当方向或语言发生重大变化时,android会破坏并重新创建您的活动。这其实很好。如果操作正确,活动的状态将被保存和还原,因此用户甚至不知道活动已重新创建。在这样做的过程中,Android会自动应用任何可能已更改的资源,例如仅适用于横向模式的布局


如果您真的想禁用此功能并手动更新任何可能已更改或保留在旧资源上的资源,请继续在所需活动中向清单中添加
android:configChanges=“orientation | screenSize”
。方向更改时将不再重新创建它

android:configChanges=“orientation | screenSize”怎么样?@gunar我不知道这个属性。我已经编辑了我的答案以包含这些信息。谢谢你。@Gunar。哈克,哈克,哈克。用谷歌自己的话来说,“只是作为最后的手段”。为什么这是一个黑客行为?有些情况下,有人可以使用该财产。使用它不会触发任何将自己定义为“黑客”的代码/逻辑。@gunar它可能被认为是黑客,因为它绕过了默认行为,并要求程序员知道他们在做什么以不破坏东西。关于
android:configChanges=“orientation | screenSize”
?@gunar我不知道这个属性。我已经编辑了我的答案以包含这些信息。谢谢你。@Gunar。哈克,哈克,哈克。用谷歌自己的话来说,“只是作为最后的手段”。为什么这是一个黑客行为?有些情况下,有人可以使用该财产。使用它不会触发任何将自己定义为“黑客”的代码/逻辑。@gunar它可能被认为是黑客,因为它绕过了默认行为,并要求程序员知道他们在做什么以不破坏东西。+1用于回答问题,同时警告OP更喜欢默认行为。@Lebonemandon我回应了小心这是一个黑客。如果你这样做,你的应用程序仍然会有很多崩溃的方式。例如,尝试更改语言。让android处理所有随方向更改而来的资源更新更容易。当然,您可以通过覆盖活动中的OnConfiguration Changed来自行完成,但您总是有可能出错。现在,如果您只支持一种语言、一种布局和一个键盘,并计划永远这样做,那么设置configChanges可能没有那么糟糕。只需确保你明白自己在做什么。+1用于回答问题,同时提醒OP更喜欢默认行为。@Lebone我附和了警告。这是一个黑客。如果你这样做,你的应用程序仍然会有很多崩溃的方式。例如,试着改变语言,这样更容易理解