rx-java
Android с RxJava
Поиск…
замечания
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 .