![](/img/trans.png)
[英]RxJava. How do I make the Observable timer run in the background?
[英]RxJava: How do I make a fetch-once-and-reuse Observable?
在每次啟動應用程序時,我都有一個Retrofit Observable,它可以從服務器獲取用戶的用戶名。 我想對每個后續訂閱者都使用該值,但似乎每次我調用subscribe()時,都會從網絡中重新獲取該值。 由於用戶名在應用程序的生命周期中不太可能更改,因此我不會重新創建Observable對象,只能實例化一次。
我希望它如何工作是:
一次創建可觀察對象
一次獲取用戶名,將該值保存在Observable中
訂閱時,使用該保存的值,或者如果尚未完成獲取,請等待其獲取
我應該怎么做?
為了詳細說明David的正確答案,下面的代碼說明了cache
的用法:
public class Caching {
public static void main(String[] args) throws IOException {
Observable<String> observable = doSomethingExpensive().cache();
observable.subscribe(System.out::println);
observable.subscribe(System.out::println);
}
private static Observable<String> doSomethingExpensive(){
return Observable.create(subscriber -> {
System.out.println("Doing something expensive");
subscriber.onNext("A result");
subscriber.onCompleted();
});
}
}
請注意,即使您兩次獲得結果,也只會做一次昂貴的事情。
您可以使用cache()
來檢索第一個訂閱者的用戶名,然后將值重播給隨后的所有訂閱者(當然包括第一個)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.