我在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 -> {});