在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:

将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。


当前回答

在清单中添加此行:android:configChanges=“orientation | screenSize”

其他回答

该方法是有用的,但在使用碎片时是不完整的。

片段通常在配置更改时重新创建。如果您不希望发生这种情况,请使用

setRetainInstance(true);在Fragment的构造函数中

这将导致在配置更改期间保留碎片。

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(布尔值)

将以下代码放在Android清单中的活动中。

android:configChanges="orientation"

当你改变方向时,这不会重新开始你的活动。

onConfigurationChanged is called when the screen rotates. 
(onCreate is no longer called when the screen rotates due to manifest, see:  
android:configChanges)

清单的哪个部分告诉它“不要调用onCreate()”?

而且谷歌的文档说要避免使用android:configChanges(除非作为最后手段)。但是,他们建议的替代方法都使用android:configChanges。

根据我的经验,模拟器总是在旋转时调用onCreate()。但我运行相同代码的1-2台设备……没有。(不知道为什么会有什么不同。)

您可以在活动中使用ViewModel对象。

ViewModel对象在配置更改期间自动保留,以便它们所保存的数据可立即用于下一个活动或片段实例。阅读更多信息:https://developer.android.com/topic/libraries/architecture/viewmodel

人们都说你应该使用

android:configChanges="keyboardHidden|orientation"

但在Android中处理旋转的最佳和最专业的方法是使用Loader类。这不是一个著名的类(我不知道为什么),但它比AsyncTask要好得多。有关更多信息,您可以阅读Udacity的Android课程中的Android教程。

当然,作为另一种方式,您可以使用onSaveInstanceState存储值或视图,并使用onRestoreInstanceState读取它们。这真的取决于你。