У меня есть BehaviorSubject, назначение которого - наблюдать за int
переменной:
private BehaviorSubject<Integer> source = BehaviorSubject.create();
В onCreate
я подписываюсь на него:
source.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
itemCounter.setText(getString(R.string.catalog_items_founded, integer));
}
});
И в коде вызываю sourse.onNext(value)
неопределённое количество раз.
Судя по тому что я читал о RxJava, по завершению жизни Activity мне нужно от sourse
отписаться чтобы на Activity не вели ссылки, но как это сделать? У sourse
нет для этого метода, у Observer
тоже, если его создавать не анонимно. Где - то я читал что можно обойтись просто source.onCompleted();
но я не уверен в этом.
Метод subscribe
возвращает объект Subscription
или Disposable
в зависимсоти от используемой версии rxJava
. У этого объекта есть метод unsubscribe
или dispose
. Именно их и нужно использовать.
Если у вас на несколько источников идёт подписка, то можно воспользоваться контейнерами для подписок CompositeSubscription
или CompositeDisposable
. У них есть методы add
и clear
для добавления подписок и очистки контейнеров, с одновременной отпиской от источников.
Как только вы отпишетесь ссылки на источники и на активити станут доступны для очистки сборщиком мусора и возможная проблема будет решена.
В вашем случае код должен быть примерно таким (код для 2 rxJava
):
В активити создаёте контейнер для подписок:
private CompositeDisposable compositeDisposable = new CompositeDisposable();
При создании подписки кладите её в контейнер:
compositeDisposable.add(source.subscribe(observer));
В нужном методе жизненного цикла очищайте контейнер. В вашем случае, видимо, в onDestroy
, хотя, возможно, вам лучше бы подошли бы onResume
/onPause
или onStart
/onStop
:
@Override
public void onDestroy() {
super.onDestroy();
compositeDisposable.clear();
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Hibenate - одна из реализация JPAJPA - это только спецификация
Пробую сериализовать обьектИдея такая: Есть класс HA(что-то типа человека) у него есть поля 1)Имя 2)Что делает 3)Id 4)Дата и есть методы 1)write 2)read...
Я хотел бы чтоб проще говоря у меня был таймер который после 1 минуты выполнял часть кода , допустим прибавлял к одной переменной еще 5 , и после...
Поддерживается ли в java бесконечные периодические дроби? Например, что будет при делении 86 на 30?