Утилизация может быть в RxAndroid - PullRequest
2 голосов
/ 29 мая 2019

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

Так что я искал в 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.Мой вопрос был бы, как бы я это сделал, если мой код не выполняется в Activity или Fragment?Я не мог просто добавить dispose() в конце моего кода после .subscribe, так как это просто завершит вызов до его завершения.

1 Ответ

1 голос
/ 29 мая 2019

Вам не нужно избавляться от 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)
      })
...