泄露的意图接收器rxAndroidble UPDATED

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泄露的意图接收器rxAndroidble UPDATED相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

  1. 取消订阅(我最喜欢的)

Subscription产生的.subscribe()分配给一个属性,然后在服务onStop()中调用:

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

如果你有一个以上的Subscription取消订阅,你可以看看什么是SerialSubscriptionCompositeSubscription可能有用。

  1. 使用disconnectTriggerSubject

使disconnectTriggerSubject接受任何值将使RxBleDevice.establishConnection()取消订阅,因此连接将被关闭。下游可能不知道它也应该取消订阅。人们可以将特殊的Throwable传递给主题,然后传递给所有订阅者。

只要确保订阅者会认为Throwable的传递方式与其他传递方式不同

  1. 为您的服务实施RxLifecycle callbacks

可能是最乏味的路径。特别是当你发现RxLifecycle is not a perfect solution

以上是关于泄露的意图接收器rxAndroidble UPDATED的主要内容,如果未能解决你的问题,请参考以下文章

RxBluetoothKit 与 RxAndroidBle

RxAndroidBle:读取预定义的 GATT 特性

go Goroutine泄露

Android性能优化:手把手带你全面了解 内存泄露 & 解决方案

将意图额外传递给android广播接收器

广播接收器未接收到意图 (RemoteViews / PendingIntent)