android - 神秘的错误 : React Native view is broken (but not crashing) after navigating to another React Native view and back

标签 android react-native

我在现有的原生 Android 应用程序中添加了几个 React Native View 。

当我显示一个 View 时,它工作正常。在我导航到另一个 View 并返回后,第一个 View 没有崩溃,而是被破坏了,即:不可点击,轮播是可滚动的,但行为很奇怪(没有捕捉到特定组件)。

我在日志中看到可疑警告,但它们不是在再次显示 View 时显示的,而是在稍后 - 在尝试触摸/交互时显示的:

10-16 11:38:59.890 9618-9618/com.someapp.android W/unknown:ReactNative: Unable to dispatch touch to JS as the catalyst instance has not been attached
10-16 11:38:59.891 9618-9618/com.someapp.android W/unknown:ReactNative: Unable to dispatch touch to JS as the catalyst instance has not been attached
10-16 11:38:59.892 9618-9618/com.someapp.android W/unknown:ReactNative: Tried to enqueue runnable on already finished thread: 'js... dropping Runnable.
10-16 11:38:59.906 9618-9618/com.someapp.android W/MessageQueue: Handler (com.facebook.react.bridge.queue.MessageQueueThreadHandler) {edf0718} sending message to a Handler on a dead thread
    java.lang.IllegalStateException: Handler (com.facebook.react.bridge.queue.MessageQueueThreadHandler) {edf0718} sending message to a Handler on a dead thread
        at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
        at android.os.Handler.enqueueMessage(Handler.java:643)
        at android.os.Handler.sendMessageAtTime(Handler.java:612)
        at android.os.Handler.sendMessageDelayed(Handler.java:582)
        at android.os.Handler.post(Handler.java:338)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl.runOnQueue(MessageQueueThreadImpl.java:59)
        at com.facebook.react.bridge.ReactContext.runOnJSQueueThread(ReactContext.java:297)
        at com.facebook.react.uimanager.events.EventDispatcher$ScheduleDispatchFrameCallback.doFrame(EventDispatcher.java:285)
        at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:134)
        at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(ChoreographerCompat.java:105)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:925)
        at android.view.Choreographer.doCallbacks(Choreographer.java:702)
        at android.view.Choreographer.doFrame(Choreographer.java:635)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
10-16 11:38:59.907 9618-9618/com.someapp.android W/unknown:ReactNative: Unable to dispatch touch to JS as the catalyst instance has not been attached
10-16 11:38:59.929 9618-9618/com.someapp.android W/unknown:ReactNative: Unable to dispatch touch to JS as the catalyst instance has not been attached
10-16 11:38:59.940 9618-9618/com.someapp.android W/unknown:ReactNative: Unable to dispatch touch to JS as the catalyst instance has not been attached

View 通过 react-native-android-fragment (v1.0.0) 作为 fragment 实现

有人遇到过类似的问题吗?关于如何追踪这一点有什么建议吗?

最佳答案

实际上这似乎是 react-native-android-fragment 及其用法的问题。

场景:

  1. 例如在选项卡 View 上创建两个 ReactFragment,A 和 B
  2. A 可见(恢复),B 隐藏(暂停)
  3. 隐藏 fragment A,显示B
  4. 销毁 fragment B,onDestroy 清除 ReactNativeHost(reactInstanceMgr.getLifecycleState() 返回 BEFORE_RESUME):
  5. 再次向A展示,尝试与其互动

这会产生警告:

10-16 11:38:59.891 9618-9618/com.someapp.android W/unknown:ReactNative: Unable to dispatch touch to JS as the catalyst instance has not been attached
10-16 11:38:59.892 9618-9618/com.someapp.android W/unknown:ReactNative: Tried to enqueue runnable on already finished thread: 'js... dropping Runnable.
10-16 11:38:59.906 9618-9618/com.someapp.android W/MessageQueue: Handler (com.facebook.react.bridge.queue.MessageQueueThreadHandler) {edf0718} sending message to a Handler on a dead thread
    java.lang.IllegalStateException: Handler (com.facebook.react.bridge.queue.MessageQueueThreadHandler) {edf0718} sending message to a Handler on a dead thread
        at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
...

在此处发布问题:https://github.com/hudl/react-native-android-fragment/issues/18

关于android - 神秘的错误 : React Native view is broken (but not crashing) after navigating to another React Native view and back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52832486/

相关文章:

android - 如何删除通知操作

android - SpannableStringBuilder.checkRange 上的 Android 8.0 外部代码中的 IndexOutOfBoundsException

android - Multidex 后 Robolectric 单元测试失败

android - 有什么方法可以让 "hide"成为屏幕阅读器的 View ,就像 HTML 中的 "aria-hidden"一样?

java - 失去焦点后无法取消对话框?

android - 如何禁用数字选择器中的上一个和下一个数字(android)

react-native - Navigation.navigate 不会去任何地方

android - 如何将 APK 发布到 Google 开发者控制台

javascript - App.js 不更新 iOS 模拟器中的修改代码

javascript - 如何在 React Native 上将 StackNavigator 与 DrawerNavigator 和 SwitchNavigator 一起使用?