RxJava发射器无响应

时间:2019-07-04 12:33:17

标签: android async-await system.reactive

我在android中使用Rx尝试了BLE轮询技术。 它需要两个ObservableStream。 (PDL协议和PDR协议) 每个协议(线程)每3秒独立运行一次。 但是BLE控制器只是其中之一。因此有可能使每个流崩溃。

我在1秒发送数据(PDL)。我同时发送数据(PDR)。 则BLE不会响应后续数据。 所以后来到达的数据不会响应数据(什么)

未重新发射Emitter时如何重试?

也许我认为发射器需要一个异步时间 因此,如果访问异步时间,请重试。 我尝试了single()线程。所以我不想崩溃。 但这是行不通的。我认为每个线程都不会在一个线程中运行。

public Observable<String> get(String protocol) {
        return Observable.create(emitter -> {
            bluetoothModule.sendProtocol(protocol, new BluetoothModule.BluetoothWriteImpl() {
                @Override
                public void onSuccessWrite(int status, String data) {
                    if (TextUtils.isEmpty(data)) {
                        emitter.onComplete();
                    }
                    emitter.onNext(data);
                }

                @Override
                public void onFailed(Exception e) {
                    emitter.onComplete();
                }
            });
        });
    }


Observable.just("PDR")
                    .flatMap(this::get)
                    .filter(it -> it.startsWith("<") || it.endsWith(">"))
                    .take(2)
                    .reduce((a, b) -> a + b)
                    .filter(it -> it.startsWith("<") && it.endsWith(">") && it.length() == 20)
                    .subscribeOn(Schedulers.single())
                    .observeOn(AndroidSchedulers.mainThread())
                    .repeatWhen(o -> o.delay(3000, TimeUnit.MILLISECONDS))
                    .subscribe(it -> {});

0 个答案:

没有答案