如何在生命周期独立班级中处置可观察物



我有一个基于 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()

可以在方法末尾调用处置,还是我必须在其他地方处置该变量,这是我的dao;

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertStore(stores: Stores): Completable 

请注意,在调用onCompleteonError之后,您无需明确处理订阅。一旦观察者收到任何终止事件,他们就会取消订阅。因此,您可以尝试的一件事是:

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中,它将返回Unit,因此val disposable将是Unit

最新更新