在旋转屏幕时,似乎Activity会重新启动并丢失其所有状态。我查阅了Android开发者指南处理运行时变更,它提到了如何处理屏幕方向并在Activity销毁之前使用onSaveInstanceState()
保存状态,在onCreate()
或onRestoreInstanceState()
中恢复状态。
在旋转屏幕时,似乎Activity会重新启动并丢失其所有状态。我查阅了Android开发者指南处理运行时变更,它提到了如何处理屏幕方向并在Activity销毁之前使用onSaveInstanceState()
保存状态,在onCreate()
或onRestoreInstanceState()
中恢复状态。
我正在回答我的问题,这就是对我有效的方法,如果有人遇到同样的问题,那么请编辑您的AndroidManifest.xml文件,位于android/app/src/main和local-cli/generator-android/templates/src/app/src/main。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ||
newConfig.orientation == Configuration.ORIENTATION_PORTRAIT ||
newConfig.orientation == Configuration.ORIENTATION_UNDEFINED ) {
return;
}
说明:
当您旋转屏幕时,应用程序将重新启动,以下是原因以及如何避免在方向更改时重新启动应用程序的方法:
您必须在AndroidMenifest.xml <activity>
标签中添加android:configChanges="orientation"
,这将告诉Android调用onConfigurationChanged(Configuration newConfig)
。
在您的活动文件中覆盖onConfigurationChanged(Configuration newConfig)
,在我的情况下是MainActivity.java,在React Native中默认已被覆盖,并且在此方法内调用了instanceManager.recreateReactContextInBackground(newConfig)
,该方法负责重新启动您的应用程序,现在为了避免重新启动行为,您需要根据newConfig添加条件。
android:configChanges
,通常被认为是Android本地社区中的一种不良实践。 - Stan Mots