在一個有點相關的說明,什麼是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();' –