android - share() 运算符不适用于 Rxjava 中的 Observable

标签 android rx-java2 rx-android rx-kotlin2

我有一个场景,我们有一个发射器,它不断地发出这样的数据

fun subscribeForEvents(): Flowable<InkChannel> {
    return Flowable.create<InkChannel>({
        if (inkDevice.availableDeviceServices.contains(DeviceServiceType.EVENT_DEVICE_SERVICE)) {
            (inkDevice.getDeviceService(DeviceServiceType.EVENT_DEVICE_SERVICE) as EventDeviceService).subscribe(object : EventCallback {
                override fun onUserActionExpected(p0: UserAction?) {
                    it.onNext(InkChannel.UserActionEvent(p0))
                }

                override fun onEvent(p0: InkDeviceEvent?, p1: Any?) {
                    it.onNext(InkChannel.InkEvents<Any>(p0, p1))
                }

                override fun onUserActionCompleted(p0: UserAction?, p1: Boolean) {

                }
            }

            )
        }
    }, BackpressureStrategy.BUFFER).share()

}

现在我有一个服务,我在应用程序启动时启动并收听它

  inkDeviceBus.subscribeForEvents()
                .filter { it -> (it as InkChannel.InkEvents<*>).event == InkDeviceEvent.STATUS_CHANGED }
                .map { it -> it as InkChannel.InkEvents<*> }
                .map { it -> it.value.toString() }
                .filter { value -> value == "CONNECTED" || value == "DISCONNECTED" }
                .map { it -> it == "CONNECTED" }
                .subscribeBy { b ->
                    if (b) stopSelf()
                }

我有另一个 Activity MainActivity,它在启动时被调用,我观察到相同的事件。 现在的问题是只有服务中的监听器获取事件,而 Activity 没有接收任何事件。

现在,当我从服务中删除监听器时, Activity 开始接收事件。我使用了运算符 share 来共享可观察的内容,但它似乎不起作用

最佳答案

.share() 仅影响调用它的实例。由于每次调用 subscribeForEvents 都会创建一个新实例,因此 .share() 不会更改行为。

您需要调用一次subscribeForEvents,然后在想要接收事件时使用返回值。只要使用同一个对象,它就会共享底层监听器。

关于android - share() 运算符不适用于 Rxjava 中的 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53456441/

相关文章:

java - 上下文和 Activity 有什么区别?

android - 使用什么在后台执行网络操作?

android - Rx 和 Kotlin 中的泛型函数引用——类型推断失败

java - RxJava等待单个事件,RxJava

java - 使用 Dagger2 在 Activity 之间保留 RxJava 调用

android - 改造!返回一个通用的可观察类型

java - 从不同的类调用 TextToSpeech

android - 自定义抽屉导航的涟漪效应

java - Android RX Java 2 一次性

rxjs - 如果相同的发射发生在 x 毫秒前,则阻止发射