在一个有点相关的说明,什么是Subscriptions.unsubscribed(),其中“返回订阅到退订什么都不做,因为它已经退订。咦点?
在1 。x,Subscriptions.unsubscribed()
用于返回一个Subscription
实例操作已完成(或从未在第一个地方运行),当控制从RxJava返回到您的代码。由于取消订阅是无状态和常量状态,返回的Subscription
是一个单例,因为仅通过查看接口Subscription
就没有(合理的)方法来区分一个已完成/未订阅的Subscription
与另一个。
在2.x中,其等效接口有一个公共和内部版本,Disposable
。内部版本主要用于替换已终止的Disposable
,避免NullPointerException
和空检查,并有助于GC。
与他们做什么?
通常你不需要担心Subscriptions.create()
;它提供了你有你想要的资源附加到您的最终用户的生命周期的情况下:
FileReader file = new FileReader ("file.txt");
readLines(file)
.map(line -> line.length())
.reduce(0, (a, b) -> a + b)
.subscribe(new Subscriber<Integer>() {
{
add(Subscriptions.create(() -> {
Closeables.closeSilently(file); // utility from Guava
});
}
@Override public void onNext(Integer) {
// process
}
// onError(), onCompleted()
});
这个例子,证明使用的一种方式,可以通过using
,而不是仍然表示:
Observable.using(
() -> new FileReader("file.txt"), // + try { } catch { }
file -> readLines(file).map(...).reduce(...),
file -> Closeables.closeSilently(file)
)
.subscribe(...)
谢谢。问题:在活动重新启动时,以某种方式存储Android Activity订阅是否允许重新连接到Observable?你能给个例子吗?我如何在默认实现中使用创建的订阅?我已经在Android应用程序中声明了一些订阅(对于RxAndroidBle),并且它似乎没有引起问题。 –
保持'Subscription'引用的主要用法是稍后调用'.dispose()'。所以,如果你不处理取消订阅,只需删除'订阅'引用,写'myObservable.subscribe();'而不分配给变量。一个典型的用法是在'onResume()'方法中订阅,存储'Subscription',并在'onPause()'中调用'subscription.dispose();' –