泄露的意图接收器rxAndroidble UPDATED

时间:2017-12-19 19:52:40

标签: android android-intent bluetooth-lowenergy rxandroidble

我注意到在compose方法中这个observable可以绑定到一个活动生命周期来做所需的取消订阅,问题是我在服务中这样做,所以我不能使用这个库,或者至少我不知道如何获得此服务生命周期并将observable绑定到它:

return bleDevice
            .establishConnection(false)
            .takeUntil(disconnectTriggerSubject)
            //.compose(RxLifecycle.bindUntilEvent(MISSINGACTIVITYLIFECYCLE, ActivityEvent.DESTROY))
            .doOnUnsubscribe(this::onDestroy)
            .compose(new ConnectionSharingAdapter());

我正在使用RxandroidBle扫描用作传感器系统接口的众多设备,一切顺利,我在后台服务中这样做,问题是当我停止服务时我不能不接受该广播,我使用了回购中提供的示例。 (修订版)

1 个答案:

答案 0 :(得分:1)

解决这个问题有几种可能性:

  1. 手动取消订阅(我最喜欢的)
  2. Subscription生成的.subscribe()分配给某个媒体资源,然后在服务onStop()中调用:

    public void onStop() {
      if (subscription != null) {
        subscription.unsubscribe();
        subscription = null;
      }
    }
    

    如果您有多个Subscription取消订阅,可以查看可能有用的SerialSubscriptionCompositeSubscription

    1. 使用disconnectTriggerSubject
    2. disconnectTriggerSubject接受任何值会使RxBleDevice.establishConnection()取消订阅,以便连接关闭。下游可能不知道它也应该取消订阅。可以将特殊Throwable传递给主题,该主题将传递给所有订阅者。

      请确保订阅者将Throwable视为与其他

      不同地传递
      1. 为您的服务实施RxLifecycle callbacks
      2. 可能是最乏味的路径。特别是当你发现RxLifecycle is not a perfect solution