android - 如何在独立于生命周期的类中处理 Observables?
问题描述
我有一个基于网络更改通知程序的类ConnectivityManager.NetworkCallback
,我想在网络可用时更新一些字段;
override fun onAvailable(network: Network?) {
super.onAvailable(network)
val db = StoreDatabase.getInstance(context)
val stores = db.createStores()
val disposable = stores.insertStore(Stores(storeName = "testOnAvailableNetInsertions", status
= AppConstants.Database.SYNC_FAIL))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()).subscribeWith(object : DisposableCompletableObserver() {
override fun onComplete() {
if (!isDisposed)
dispose()
}
override fun onError(e: Throwable) {
if (!isDisposed)
dispose()
}
}).dispose()
是否可以在方法结束时调用 dispose,或者我必须在其他地方处理该变量,这就是我的道;
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertStore(stores: Stores): Completable
解决方案
请注意,您不需要在调用onComplete
or之后显式处理订阅。onError
一旦收到任何终止事件,观察者将被取消订阅。所以你可以尝试的一件事是:
super.onAvailable(network)
val db = StoreDatabase.getInstance(context)
val stores = db.createStores()
stores.insertStore(Stores(storeName="testOnAvailableNetInsertions",
status=AppConstants.Database.SYNC_FAIL))
.subscribeOn(Schedulers.io())
.subscribe()
在链的末端调用.dispose()
将立即处理订阅,在大多数情况下它没有多大意义。它可能只适用于您的情况,因为您的订阅者在技术上并没有做太多事情,但我不确定。此外,.dispose()
不返回任何东西。在 Kotlin 中,它会返回 a Unit
,所以它val disposable
只是 a Unit
。
推荐阅读
- c - 指向整数数组的指针
- java - 如何在 JPA 中设置默认模式
- bash - 如何从具有结构标准的文件中删除行
- ios - 生成的 CGImage 总是模糊的
- javascript - jsPDF导出为带有样式的pdf
- r - 大代数R中的大矩阵运算
- google-app-maker - 使用按钮旋转图像 App Maker
- java - 在 Java 中转义 Json 文本到对象的转换使文本未转义
- c# - Sql Client AddWithValue 空参数不带@符号
- javascript - How to remove existing markers and infobubbles from HERE maps