1

我正在用 Kotlin 构建一个 React Native 模块。我有一个外部 Java SDK,可以发现多个协议/网络/服务器上的外围设备。

有一个这样的发现类:

class Discovery(params: Params) {

  fun start() {
    // ...
  }

  fun stop() {
    // ...
  }

}

我想将startDiscovery()stopDiscovery()函数传递给 React Bridge。

客户端可以同时在多个协议/服务器/...上搜索多个设备。所以它需要同时实例化许多Discovery类,并在必要时停止其中的一些。某种发现池。

所以我想将对实例化对象的引用传递给 Javascript,这样每次它想调用另一个方法时它就可以返回给我。但是 React Bridges 不允许将 Java 对象传递给 JavaScript。有什么好的模式可以这样做吗?

4

1 回答 1

1

只需尝试在 java 中进行异步操作,这样线程就不会卡住,也不会失去性能(如果您有异步操作,则返回承诺)。

public class DummyModule extends ReactContextBaseJavaModule {
MyDummyClass dummy // this context

public DummyModule(final ReactApplicationContext reactContext){
super(reactContext);
}

@Override
    // getName is required to define the name of the module represented in
    // JavaScript
    public String getName() {
        return "DummyModule";
    }
@ReactMethod
    public void startMyClass() {
       this.dummy = new MyDummyClass();
    }

@ReactMethod
    public void fooActionClass() {
       if(this.dummy != null){
           this.dummy.fooAction();
       }
    }
}

在您的 JavaScript 代码中

import { NativeModules } from 'react-native';
const dummyModule = NativeModules.DummyModule;

dummyModule.startMyClass();
// Make sure that u call the action when the class is instanciated.
dummyModule.fooActionClass();
于 2020-09-08T08:44:32.260 回答