React Native Android:如何在屏幕旋转或方向变化时保存状态

7

在旋转屏幕时,似乎Activity会重新启动并丢失其所有状态。我查阅了Android开发者指南处理运行时变更,它提到了如何处理屏幕方向并在Activity销毁之前使用onSaveInstanceState()保存状态,在onCreate()onRestoreInstanceState()中恢复状态。

4个回答

1

我正在回答我的问题,这就是对我有效的方法,如果有人遇到同样的问题,那么请编辑您的AndroidManifest.xml文件,位于android/app/src/mainlocal-cli/generator-android/templates/src/app/src/main

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">

2
这并没有解决进程死亡的问题,如果你把应用程序放到后台,而系统将其杀死,你该如何恢复它? - EpicPandaForce
1
请注意,仅在万不得已的情况下使用android:configChanges,通常被认为是Android本地社区中的一种不良实践。 - Stan Mots

1
对我起作用的解决方案是避免在屏幕方向改变时重新启动应用程序而不保存状态,如果您按照此方式操作,则无需真正保存状态。

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ||
  newConfig.orientation == Configuration.ORIENTATION_PORTRAIT ||
  newConfig.orientation == Configuration.ORIENTATION_UNDEFINED ) { 
    return; 
  }

说明:

当您旋转屏幕时,应用程序将重新启动,以下是原因以及如何避免在方向更改时重新启动应用程序的方法:

  1. 您必须在AndroidMenifest.xml <activity>标签中添加android:configChanges="orientation",这将告诉Android调用onConfigurationChanged(Configuration newConfig)

  2. 在您的活动文件中覆盖onConfigurationChanged(Configuration newConfig),在我的情况下是MainActivity.java,在React Native中默认已被覆盖,并且在此方法内调用了instanceManager.recreateReactContextInBackground(newConfig),该方法负责重新启动您的应用程序,现在为了避免重新启动行为,您需要根据newConfig添加条件。


0

1
谢谢提供链接,非常感谢。我正在寻求有关React Native Android上下文的建议。情景是从场景A路由到场景B时,它可以完美地工作,但在屏幕旋转时,它会丢失数据并返回到初始场景A,而不是停留在当前场景B。基本上,我想知道如何在React Native中创建本地模块。例如:https://facebook.github.io/react-native/docs/native-modules-android.html#content - avatarfreak

0
在我们的混合 React Native <> 原生 Android 应用中,我们已经解决了这个问题,该应用需要启用方向更改。我们通过在 ViewModel 中缓存对 React Native 视图的引用,并在运行时更改后重新使用它来实现。
这并不是 Android 推荐的做法,会导致视图具有过时的引用,但是我们已经成功地解决了这些问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接