Утилизация возможно в RxAndroid

Я новичок в реактивном мире, поэтому, пожалуйста, потерпите меня, если я говорю что-то не так (пожалуйста, поправьте меня!).

Итак, я искал в Google и здесь что-то подобное, но я думаю, что не видел ничего вокруг того, что я сделал. Я использую библиотеку Rx2Firebase для получения некоторых данных из моей базы данных с помощью метода RxFirebaseDatabase.observeSingleValueEvent, и я не мог понять, как я буду избавляться от созданного мной Observable. Таким образом, этот метод возвращает 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. Мой вопрос будет заключаться в том, как мне это сделать, если мой код не выполняется в действии или фрагменте? Я не мог просто добавить dispose() в конце моего кода после .subscribe, так как это просто завершило бы вызов до его завершения.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
243
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно избавляться от Maybe после того, как ваш код был выполнен. Вы должны удалять любые наблюдаемые, когда вам нужно отменить основное действие. Поскольку вы используете Android, действие запускается из какого-то компонента, поддерживающего жизненный цикл. Это может быть Activity, Fragment или Service. Если вы инициируете вызов из 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)
      })

Спасибо! Это то, что мне нужно. Это сработало, как задумано. Если есть какие-то супер нубы (например, я), я просто проверил onDestroyView() и onDestroy(), зарегистрировав свойство isDisposed, чтобы убедиться, что оно было удалено.

kobowo 29.05.2019 09:55

Исправление того, что я сказал в последний раз... не делайте этого на onViewDestroy, если вы используете вкладки. Это приведет к сбою, если другие вкладки также наблюдают то же самое.

kobowo 29.05.2019 10:40

Другие вопросы по теме