gpt4 book ai didi

javascript - react native : sending events from android to javascript

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:25 27 4
gpt4 key购买 nike

有关于如何通过 RN 桥从 RN javascript 部分 与 android 和 ios 中的 native 部分 进行通信的文档。不太清楚的是桥接通信的生命周期。

(来源 medium)

我在 android 中有一个后台服务,需要将事件发送到我的 RN 应用程序。这就是我从 android Service 发送事件的方式:

private RCTDeviceEventEmitter emitter() {
return mReactContext.getJSModule(RCTDeviceEventEmitter.class);
}
private void pushPayload(String event, WritableMap payload) {
emitter().emit(event, payload);
}
public void sendTimerEvent(long remaining) {
WritableMap data = Arguments.createMap();
data.putInt("remaining", (int) remaining);
pushPayload("timeoutEvent", data);
}

在 javascript 方面,我使用以下静态代码(不在组件中,只是将代码导入到我的 index.android.js 文件中:

const subscribeForNativeEvents = (eventID, callback) => {
const Emitter = Platform.OS === 'android' ? DeviceEventEmitter : NativeAppEventEmitter;
Emitter.addListener(eventID, callback);
};

subscribeForNativeEvents('timeoutEvent', (event) => {
// work with event.remaining
});

即使应用程序在后台运行,我的服务也会运行。但我想确保我只在安全的情况下尝试与 javascript 端通信。

我有时会收到诸如React: Calling JS function after bridge has been destroyed 之类的错误。有没有办法在 native (android) 端找出桥接器是否可用?

这不是关于如何让后台代码保持 Activity 状态,而是要确保只要我的 native (android) 代码在运行,我就可以确保事件不会丢失。

最佳答案

当相应的 ReactContext/CatalystInstance 已经被销毁,并且您正在尝试从 native 端执行一些 JS 操作(例如发送事件、执行回调等)时,就会出现此问题。

我猜你最好的选择是使用生命周期回调,即 onHostResume、onHostDestroy ( https://facebook.github.io/react-native/docs/native-modules-android.html#listening-to-lifecycle-events )或者使用另一个回调 onCatalystInstanceDestroy( https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java#L51 )

只有当你知道它没有被销毁时才发送事件。

核心思想是通常 react 上下文绑定(bind)到应用程序中的给定 Activity/上下文,并且您可以通过 NativeModule 中的回调了解该生命周期。

您可以在 ( https://github.com/facebook/react-native/blob/b531612b2c917e1f2bd6bb37bf854fe51e658b36/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java#L104 ) 找到更多详细信息

关于javascript - react native : sending events from android to javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com