У меня есть класс, который принимает Observable
и подписывается на него.
static class Helper {
void subscribeTo(Observable<Object> observable) {
observable.subscribe(someObject -> {
// do something with someObject;
});
}
}
Есть ли способ, что этот класс сам может быть уверен, что он отменит подписку при установке на null
?
void main() {
Helper helper = new Helper();
Observable<Object> observable = ... // an observable that never completes
helper.subscribeTo(observable);
...
helper = null; // helper will never be GC'd because observable never completes
}
В этом примере Helper
очень легко злоупотребить, если вы дадите ему бесконечный Observable
.
Лучшее решение, которое я могу придумать, это разрешить (но не принудительно) экземпляру класса очищает вспомогательный класс перед установкой на нуль:
static class Helper {
private Disposable disposable;
void subscribeTo(Observable<Object> observable) {
// do something with someObject;
disposable = observable.subscribe(someObject -> {
// do something with someObject;
});
}
void cleanup() {
disposable.dispose();
}
}
void main() {
Helper helper = new Helper();
Observable<Object> observable = ... // an observable that never completes
helper.subscribeTo(observable);
...
helper.cleanup();
helper = null;
}