Почему следует рассмотреть возможность использования AndroidObservables в RxJava

Насколько я понимаю, AndroidObservable помогает убедиться, что:

  1. Подписчик всегда наблюдает за основным потоком
  2. когда фрагмент/активность отсоединяется/останавливается, наблюдение немедленно останавливается, а компоненты, связанные с фреймворком (например, текстовые представления пользовательского интерфейса и т. д.), не обновляются.

Однако, чтобы гарантировать освобождение контекста (предотвращая утечку), в большинстве примеров, которые я вижу, обычно говорится, что вы все равно должны выполнить .unsubscribe onDestroyView/onDestroy, что по существу останавливает подписку и не позволяет подписчику получать эти обновления в любом случае. .

Итак, мой вопрос:

Есть ли какое-либо другое преимущество в использовании AndroidObservables, если я вручную указываю, что подписка должна происходить в основном потоке, посредством .observeOn(AndroidSchedulers.mainThread() ?

Есть ли разница в двух приведенных ниже подходах?

_subscription1 = AndroidObservable.bindFragment(MyFragment.this, myCustomAwesomeObservable()) //
                           .subscribeOn(Schedulers.io()) //
                           .subscribe(...);


_subscription2 =  myCustomAwesomeObservable()
                           .subscribeOn(Schedulers.io()) //
                           .observeOn(AndroidSchedulers.mainThread()) //
                           .subscribe(...);


@Override
public void onDestroyView() {
    _subscription1.unsubscribe();
    _subscription2.unsubscribe();
    super.onDestroyView();
}

person Kaushik Gopal    schedule 02.09.2014    source источник


Ответы (2)


Ты прав. В настоящее время AndroidObservable.bindFragment делает следующее:

Этот помощник запланирует наблюдение за данной последовательностью в основном потоке пользовательского интерфейса и гарантирует, что никакие уведомления не будут перенаправлены в действие, если оно запланировано для завершения.

-- часть комментария к исходному коду

Таким образом, на самом деле не имеет значения, какую из реализаций вы используете.

Но все же рекомендуется использовать AndroidObservable, так как в будущем могут быть добавлены дополнительные функции.

person Jonas Lüthke    schedule 05.09.2014
comment
ах, это хороший момент о добавлении дополнительных функций с маршрутом AndroidObservable. - person Kaushik Gopal; 09.09.2014

Его больше не существует с момента выпуска 1.0 RxAndroid. Я думаю, вы могли бы сказать, что это устарело или снято с производства. Я не думаю, что это хорошая идея, чтобы использовать это больше.

person Marcin Koziński    schedule 24.05.2016