react原生android:如何在屏幕旋转或方向上保存状态



在旋转屏幕上,活动似乎正在重新启动,它失去了所有状态。我查看了android开发者指南。处理运行时更改。它提到了如何在onCreate()onRestoreInstanceState()期间破坏您的活动并恢复状态之前处理屏幕方向和使用onSaveInstanceState()

我正在回答我的问题,这就是它对我的作用,如果有人面临同样的问题,请在上编辑您的AndroidManifest.xmlandroid/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">

对我有效的解决方案是避免在方向更改时重新启动应用程序而不保存状态,如果按照此操作,则不需要保存状态。

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 添加了条件

以下是如何在Android 中保存/检索活动实例的详细说明

https://web.archive.org/web/20160308105435/http://www.intertech.com/blog/saving-and-retriving-android-instance-state-part-1/

我们在混合React Native<gt;Native Android应用程序需要启用方向更改,方法是在ViewModel中缓存对React Native视图的引用,并在运行时更改后重新创建视图时重用该引用。

Android不建议这样做,这会导致视图中的其他一些问题具有过时的引用,但这些问题已经成功解决。

最新更新