Поиск…


замечания

RxAndroid раньше была библиотекой с множеством функций. Он был разделен во многих библиотеках, начиная от версии 0.25.0 до 1.x.

Список библиотек, реализующих функции, доступные до версии 1.0, поддерживается здесь .

RxAndroid - AndroidSchedulers

Это буквально единственное, что вам нужно, чтобы начать использовать RxJava на Android.

Включите RxJava и RxAndroid в зависимостях градиента:

 // use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

Основное дополнение RxAndroid к RxJava - это планировщик для главной темы Android или пользовательского интерфейса.

В вашем коде:

Observable.just("one", "two", "three", "four", "five")
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            data -> doStuffOnMainThread(),
            error -> handleErrorOnMainThread()
        )

Или вы можете создать Планировщик для пользовательского Looper :

Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.from(backgroundLooper))
        .subscribe(
            data -> doStuffOnMainThread(),
            error -> handleErrorOnMainThread()
        )

Для большинства остальных вы можете обратиться к стандартной документации RxJava.

Компоненты RxLifecycle

Библиотека RxLifecycle упрощает привязку наблюдаемых подписки к действиям Android и жизненному циклу фрагмента.

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

Добавьте библиотеку в зависимости:

// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'

Затем расширяет классы Rx* :

  • RxActivity / support.RxFragmentActivity / support.RxAppCompatActivity
  • RxFragment / support.RxFragment
  • RxDialogFragment / support.RxDialogFragment
  • support.RxAppCompatDialogActivity

Вы все настроены, когда подписываетесь на Observable, вы можете сейчас:

someObservable
    .compose(bindToLifecycle())
    .subscribe();

Если вы выполните это в onCreate() он автоматически onDestroy() в onDestroy() .

То же самое происходит и для:

  • onStart() -> onStop()
  • onResume() -> onPause()
  • onAttach() -> onDetach() (только для фрагмента)
  • onViewCreated() -> onDestroyView() (только для фрагмента)

В качестве альтернативы вы можете указать событие, когда хотите, чтобы произошла отмена подписки:

Из деятельности:

someObservable
    .compose(bindUntilEvent(ActivityEvent.DESTROY))
    .subscribe();

Из фрагмента:

someObservable
    .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
    .subscribe();

Вы также можете получить наблюдаемый жизненный цикл с помощью метода lifecycle() для непосредственного прослушивания событий жизненного цикла.

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

.compose(RxLifecycleAndroid.bindActivity(lifecycle))

Если вам нужно обрабатывать Single или Completable вы можете сделать это, просто добавив соответственно forSingle() или forCompletable после метода привязки:

someSingle
    .compose(bindToLifecycle().forSingle())
    .subscribe();

Его также можно использовать с библиотекой Navi .

Rxpermissions

Эта библиотека позволяет использовать RxJava с новой моделью разрешения Android M.

Добавьте библиотеку в зависимости:

Rxjava

dependencies {
    compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}

Rxjava2

dependencies {
    compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}

использование

Пример (с Retrolambda для краткости, но не обязательно):

// Must be done during an initialization phase like onCreate
RxPermissions.getInstance(this)
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

Подробнее: https://github.com/tbruyelle/RxPermissions .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow