Как разместить 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 в конце метода, или мне нужно расположить эту переменную где-нибудь еще, и это мой Dao;
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertStore(stores: Stores): Completable
1 ответ
Обратите внимание, что вам не нужно явно распоряжаться подписками после onComplete
или же 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()
ничего не возвращает. В Котлин вернется Unit
Итак val disposable
просто будет Unit
,