Должен ли Observable вызывать .onComplete () при удалении подписчика? - PullRequest
0 голосов
/ 04 ноября 2018

Я пишу Observable для обработки подключений к Сервисам Android, смоделированный после RxAndroidBle .establishConnection().

Я знаю, что .establishConnection() никогда не звонит .onComplete(); после того, как оно испускает соединение, оно либо удаляется подписчиком, либо завершается с ошибкой (обычно, если соединение потеряно). Но кажется разумным, что .onComplete() будет вызываться при удалении соединения. Мне не удалось найти официальную политику RxJava по этому вопросу; кажется, что некоторые Observable делают это, а другие нет Каково правильное поведение для Observable, который испускает один элемент и затем удаляется?

1 Ответ

0 голосов
/ 04 ноября 2018

Каково правильное поведение для Наблюдаемой, которая испускает один предмет и затем удаляется?

Если я правильно понял, это вопрос о том, как должен вести себя Observable при утилизации в соответствии с официальной политикой реагирования. На самом деле оба звонка / не вызов звонка .onComplete() при утилизации выровнены с контрактом Observable , но последний, кажется, предпочтительнее (жирный рудник):

наблюдаемое завершение

Наблюдатель может начать отправлять уведомления наблюдателю сразу после того, как Наблюдатель получит уведомление о подписке от наблюдателя.

Когда наблюдатель отправляет уведомление об отмене подписки в Наблюдаемую, Наблюдаемая попытается прекратить выдачу уведомлений наблюдателю. Однако не гарантируется, что Обозримый объект не будет выпускать уведомления для наблюдателя после того, как наблюдатель отправит ему уведомление об отмене подписки.

Когда Observable выпускает уведомление OnError или OnComplete своим наблюдателям, это прекращает подписку. Наблюдателям не нужно отправлять уведомление об отмене подписки, чтобы завершить подписки, которые заканчиваются Наблюдаемым таким образом.

Где уведомления:

К Observer:

  • OnNext
  • OnCompleted
  • OnError
  • OnSubscribe (необязательно)

К ObservableSource:

  • Subscribe
  • Unsubscribe
  • Request (необязательно)
...