我知道当您订阅Observable时,您将获得一个订阅,您必须使用Android的生命周期取消订阅。 因此,在Fragment或Activity中订阅的情况下,我用来取消订阅onDestroy()。
但我的问题是当我在没有任何生命周期的地方进行订阅时。例如,在SyncAdapter中。在这种情况下(或案例)我怎么能“自动取消订阅”以避免内存泄漏? 有没有什么好的做法可以说明“我在XX位置订阅”,我在SyncAdapter中打破了这个订阅?
我在考虑这样的事情:
compositeDisposable.add(
Observable.just()...
...
.doOnTerminate(compositeDisposable::dispose)
.subscribe(...)
);
答案 0 :(得分:0)
您不仅可以“自动取消订阅”,还可以选择要取消订阅的主题。这是一个非常简单的例子
Observable<Object> source = Observable.using(
() -> {
System.out.println("Subscribed on " + Thread.currentThread().getId());
return Arrays.asList(1,2);
},
(ints) -> {
System.out.println("Producing on " + Thread.currentThread().getId());
return Observable.from(ints);
},
(ints) -> {
System.out.println("Unubscribed on " + Thread.currentThread().getId());
}
);
source
.unsubscribeOn(Schedulers.newThread())
.subscribe(System.out::println);
输出应为
Subscribed on 1
Producing on 1
1
2
Unubscribed on 11
每个CompositeDisaposable
或Disposable
或Subscription
都可以unsubscribe
。但请确保在stream
结束时执行此操作。注意threading
。