有没有办法取消队列中的所有操作?

Is there a way to cancel all operations in the queue?

我正在使用 RxAndroidBle 库(很棒)编写应用程序,但由于设备供应商的要求,我们必须能够在设备达到特定状态后取消所有操作。有没有办法取消任何已发送到 RxBleConnection 的 read/write 操作?

有什么想法吗?

谢谢!

该库使用内部 ConnectionOperationQueue 尝试删除尚未达到执行状态的操作。具体的实现会因情况而异,但使用 RxJava 应该很容易实现:

// First create a completable that will fulfil appropriately
Completable deviceReachedACertainState = ...;

// Then use it for every operation that you want to cancel (unsubscribe) when a certain state happens
Observable<byte[]> cancellableRead = rxBleConnection.readCharacteristic(UUID).takeUntil(deviceReachedACertainState);

请记住,已经从队列中取出来等待执行的操作不会被取消。