oli*_*ver 9 javascript java lifecycle android react-native
有关于如何通过RN桥接器从RN javascript部分与android和ios中的本机部分进行通信的文档.什么是不清楚的是桥梁通信的生命周期.

(来源媒体)
我在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);
}
Run Code Online (Sandbox Code Playgroud)
在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
});
Run Code Online (Sandbox Code Playgroud)
即使应用程序在后台,我的服务也会运行.但我想确保在安全的情况下我只尝试与javascript端进行通信.
我有时会得到诸如此类的错误React: Calling JS function after bridge has been destroyed.有没有办法找到本机(android)侧的桥是否可用?
这不是关于如何保持后台代码活着,而是要确保只要我的本机(android)代码正在运行,我就可以确保事件不会丢失.
当相应的 ReactContext/CatalystInstance 已经被销毁,并且您尝试从本机端执行一些 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 )
仅当您知道事件未被破坏时才发送事件。
核心思想是,通常反应上下文绑定到应用程序中给定的 Activity/Context,并且您可以通过 NativeModule 中的回调了解生命周期。
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |