0

我是 RxJava 的新手,当我阅读 rxandroidble 库的演示时,我想知道为什么第一个可以断开 ble。

@OnClick(R.id.connect)
    public void onConnectToggleClick() {
        bleDevice.establishConnection(false)
                .flatMap(RxBleConnection::discoverServices)
                .first() // Disconnect automatically after discovery
                .compose(bindUntilEvent(PAUSE))
                .observeOn(AndroidSchedulers.mainThread())
                .doOnUnsubscribe(this::updateUI)
                .subscribe(adapter::swapScanResult, this::onConnectionFailure);

        updateUI();
    }
4

1 回答 1

0

状态的RxAndroidBle Observable 行为establishConnection()即仅发出单个值,而流未完成。它还指出,取消订阅 observable 会断开连接。

每当您不再对保持连接打开感兴趣时,您应该取消订阅它,这将导致断开连接和资源清理。

但是first()运算符发出一个值并在之后完成流。由于bindUntilEvent(PAUSE)暂停时也会完成流式传输,因此您根本不需要使用first()。所以只需删除它,一切都会好起来的。

于 2017-06-07T13:15:39.230 回答