RxLife, по сравнению с [trello/RxLifecycle], [uber/AutoDispose], имеет следующие преимущества:
Дружеское напоминание: используйте RxLife в сочетании с [RxHttp], так будет ещё лучше.
Подробное описание RxLife: https://juejin.im/post/5cf3e1235188251c064815f1
Добавьте jitpack в файл build.gradle вашего проекта следующим образом:
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
Примечание: начиная с версии 2.1.0, RxLife полностью перенесён из JCenter на jitpack.
Новая версия поддерживает только проекты AndroidX.
dependencies {
//rxjava2
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava2:2.2.2'
//rxjava3
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava3:2.2.2'
}
Обратите внимание: для RxJava2 используйте метод Rxlife.asXxx; для RxJava3 используйте метод Rxlife.toXxx.
Для проектов, не использующих AndroidX, используйте старую версию RxLife.
implementation 'com.rxjava.rxlife:rxlife:2.0.0'
Поскольку Google прекратил обновление библиотек, не относящихся к AndroidX, в 19 году, старая версия rxlife больше не поддерживается, поэтому как можно скорее перенесите проект на AndroidX.
При уничтожении FragmentActivity/Fragment автоматически закрывается канал RxJava.
Observable.timer(5, TimeUnit.SECONDS)
.as(RxLife.as(this)) // В этом случае this является объектом FragmentActivity/Fragment
.subscribe(aLong -> {
Log.e("LJX", "accept =" + aLong);
});
Когда View удаляется, канал RxJava автоматически закрывается.
Observable.timer(5, TimeUnit.SECONDS)
.as(RxLife.as(this)) // В этом случае this относится к объекту View
.subscribe(aLong -> {
Log.e("LJX", "accept =" + aLong);
});
При уничтожении Activity/Fragment канал RxJava закрывается автоматически. ViewModel должен наследовать класс ScopeViewModel следующим образом:
public class MyViewModel extends ScopeViewModel {
public MyViewModel(@NonNull Application application) {
super(application);
}
public void test(){
Observable.interval(1, 1, TimeUnit.SECONDS)
.as(RxLife.asOnMain(this)) // После наследования ScopeViewModel можно напрямую передать this
.subscribe(aLong -> {
Log.e("LJX", "MyViewModel aLong=" + aLong);
});
}
}
Обратите внимание: необходимо получить объект ViewModel через Activity/Fragment следующим образом, иначе RxLife не получит обратных вызовов жизненного цикла.
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
При уничтожении Activity/Fragment канал RxJava закрывается автоматически. Любой класс должен наследовать класс BaseScope, например, P-слой:
public class Presenter extends BaseScope {
public Presenter(LifecycleOwner owner) {
super(owner); // Добавить мониторинг жизненного цикла
}
public void test(){
Observable.interval(1, 1, TimeUnit.SECONDS)
.as(RxLife.as(this)) // После наследования BaseScope можно напрямую передать this
.subscribe(aLong -> {
Log.e("LJX", "accept aLong=" + aLong);
});
}
}
Поскольку as — это ключевое слово в Kotlin, мы не можем использовать его напрямую. Вместо этого мы можем написать следующий код:
Observable.intervalRange(1, 100, 0, 200, TimeUnit.MILLISECONDS)
.`as`(RxLife.`as`(this))
.subscribe { aLong ->
Log.e("LJX", "accept=" + aLong)
}
Конечно, мало кто предпочитает такой способ написания, поэтому RxLife предоставляет более удобный способ для пользователей Kotlin:
Observable.intervalRange(1, 100, 0, 200, TimeUnit.MILLISECONDS)
.life(this)
.subscribe { aLong ->
Log.e("LJX", "accept=" + aLong)
}
Используйте оператор life вместо оператора as, остальное остаётся прежним.
RxLife также предоставляет оператор asOnMain, который может указывать на то, что наблюдатель вызывается в основном потоке, следующим образом:
Observable.timer(5, TimeUnit.SECONDS)
.as(RxLife.asOnMain(this))
.subscribe(aLong -> {
// Вызов в основном потоке
Log.e("LJX", "accept =" + aLong);
});
// Эквивалентно
Observable.timer(5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.as(RxLife.as(this))
.subscribe(aLong -> {
// Вызов в основном потоке
Log.e("LJX", "accept =" + aLong);
});
Пользователи Kotlin используют lifeOnMain вместо оператора asOnMain, остальное остаётся прежним.
Обратите внимание: операторы as в классе RxLife применимы ко всем шести наблюдаемым объектам: Flowable, ParallelFlowable, Observable, Single, Maybe и Completable.
Как библиотека с открытым исходным кодом, RxLife может быть сжата или не сжата. Если вы не хотите, чтобы она была сжата, добавьте следующий код в файл proguard-rules.pro:
-keep class com.rxjava.rxlife.**{*;}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )