Android中的RxJava:当您没有生命周期时,自动取消订阅订阅

时间:2017-07-27 15:30:06

标签: android rx-java android-syncadapter subscriptions

我知道当您订阅Observable时,您将获得一个订阅,您必须使用Android的生命周期取消订阅。 因此,在Fragment或Activity中订阅的情况下,我用来取消订阅onDestroy()。

但我的问题是当我在没有任何生命周期的地方进行订阅时。例如,在SyncAdapter中。在这种情况下(或案例)我怎么能“自动取消订阅”以避免内存泄漏? 有没有什么好的做法可以说明“我在XX位置订阅”,我在SyncAdapter中打破了这个订阅?

我在考虑这样的事情:

compositeDisposable.add(
   Observable.just()...
   ...
   .doOnTerminate(compositeDisposable::dispose)
   .subscribe(...)
   );

1 个答案:

答案 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

每个CompositeDisaposableDisposableSubscription都可以unsubscribe。但请确保在stream结束时执行此操作。注意threading