1

我们遇到了一个问题,即在应用程序“崩溃”并重新加载(用户被踢回第一个屏幕)后,每当用户按下 Android 后退按钮时,应用程序就会进入后台。我能够使用 CRNA 在 Expo 31 SDK 上提供的默认“Tabs”项目重现这一点(链接:https ://exp-shell-app-assets.s3.us-west-1.amazonaws.com/android/ %40allen.lin/split-screen-poc-c25e728a483c4c71ba9109ac70a93ef1-signed.apk 1) 没有添加额外的代码。当前的解决方法是让用户打开应用程序切换器并杀死并重新打开应用程序。

以下是在 Google Pixel 2 手机(或任何其他具有分屏功能的手机)上始终如一地重现它的一些步骤,这将导致应用重新加载:

  1. 打开应用程序。
  2. 点击任何选项卡以切换到不同的屏幕(即“链接”)。按下 Android 后退按钮应该让用户回到“主页”选项卡。
  3. 从这里,通过长按位于设备底部的方形图标(返回和主页按钮所在的位置)激活分屏功能。这将导致应用程序崩溃并重新加载。
  4. 通过将屏幕中心的黑色水平条拖到屏幕底部来退出分屏视图,以便再次聚焦应用程序。这将再次导致应用程序崩溃并重新加载。再次点击“链接”选项卡。
  5. 现在按下 Android 后退按钮。该应用程序应最小化。

我尝试查看 ADB Logcat,但日志中有太多噪音。不过,当我用 grep 查找“异常”的日志时,一行确实突出了:

12-05 16:03:07.137 23448 23448 E j : Runtime exception in RNObject when calling method getCurrentReactContext: java.lang.NullPointerException: null receiver

我还看到按下后退按钮时对 moveTaskToBack() 进行了一些调用。

需要明确的是,这与 Android 设备上的分屏功能无关。我的一位同事能够在我们的主 Expo 应用程序 (SDK 30) 中在他的小米 A1M1 设备(运行 Vanilla Android 8.1.0 - 他使用的是 Android One 程序)上重现这一点。他的设备没有分屏功能,他仍然看到这个问题。我认为由于某些代码问题,我们的实际应用程序可能在他的设备上崩溃了。

这是世博会的一个已知问题吗?是否有避免此 Android 后退按钮问题的解决方法?

编辑:在这里被世博工程师跟踪:https ://github.com/expo/expo/issues/1786 。Android 上的主要问题似乎是内存压力导致应用程序被杀死。

可能是反应原生问题。

4

0 回答 0