在 RxAndroid 中配置 Maybe

Disposing Maybe in RxAndroid

我是反应世界的新手,所以如果我说的不对请多多包涵(请纠正我!)。

所以我在 google 和此处搜索类似的东西,但我想我没有看到我所做的任何事情。我正在使用 Rx2Firebase 库使用 RxFirebaseDatabase.observeSingleValueEvent 方法从我的数据库中获取一些数据,但我无法思考如何处理我创建的 Observable。所以这个方法 returns a Maybe 并且我想在执行我的代码后处理 Maybe 但我不确定如何(阅读下面的原因)。

我当前的代码如下所示:

private fun getUserStatus(callback: () -> Unit) {

RxFirebaseDatabase
    .observeSingleValueEvent(myQuery,(entry::class.java))
    .subscribe ({ item
     myEntry = item
     callback()
   },{ e
     Log.e("Error", e.message)
   })
}

根据我的阅读,可观察对象被分配给一个 Disposable 变量,然后我认为该变量会被释放?像 var disposable: Disposable = <Insert my code above for calling Firebase> 这样的东西,你会在 onDestroy 中这样做(根据我的阅读)。我的问题是,如果我的代码没有在 Activity 或 Fragment 中执行,我该怎么办?我不能在 .subscribe 之后的代码末尾添加一个 dispose(),因为那样只会在调用结束之前结束调用。

您无需在执行代码后处理 Maybe。每当您需要取消基础操作时,您都应该处置任何可观察对象。由于您使用的是 Android,因此该操作是从某个生命周期感知组件中触发的。这可能是 ActivityFragmentService。如果您从 BroadcastReceiver 触发呼叫,您应该启动一项服务来执行此操作。

对于这些组件中的任何一个,您都有一个方法 onDestroy,您可以在其中处理可观察对象。您唯一需要确保的是将 Disposable 传播到这个级别:

private fun getUserStatus(callback: () -> Unit): Disposable =
    RxFirebaseDatabase
      .observeSingleValueEvent(myQuery,(entry::class.java))
      .subscribe ({ item ->
          myEntry = item
          callback()
      },{ e ->
          Log.e("Error", e.message)
      })