如何在生命周期独立的类中放置Observables?

时间:2019-02-28 05:11:23

标签: android observable rx-java2 android-room android-connectivitymanager

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

1 个答案:

答案 0 :(得分:1)

请注意,在调用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