RxJava2 Flowable cache
阿新 • • 發佈:2018-12-13
目錄
cache
cache介面
cache()
返回一個惰性地訂閱此釋出者的Flowable,快取其所有事件,並按照收到的順序將它們重播給所有下游訂閱者。 |
返回一個惰性地訂閱此釋出者的Flowable,快取其所有事件,並按照收到的順序將它們重播給所有下游訂閱者,並可以通過 |
cache圖解說明
這幅圖形象的說明了cache的作用,cache不會影響源的發射,只是會快取發射專案,然後構造一個新的Flowable,將快取的專案一次性發射出來
cache 測試用例
測試程式碼 @Test public void cache() { System.out.println("######cache#####"); Flowable.just(10, 22, 13, 74, 52) .cache() .subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { System.out.println("integer=" + integer); } }); } @Test public void cacheWithInitialCapacity() { System.out.println("######cacheWithInitialCapacity#####"); Flowable.just(10, 22, 13, 74, 52).cacheWithInitialCapacity(1).subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { System.out.println("integer=" + integer); } }); } 測試結果 ######cacheWithInitialCapacity##### integer=10 integer=22 integer=13 integer=74 integer=52
cache 測試用例分析
其實cache也是直接呼叫了cacheWithInitialCapacity返回的,所以上面就直接使用cacheWithInitialCapacity來測試 。
從上面的測試效果來看,看不出來cache與Flowable直接使用有何不同,實際上就是用來做快取用的,呼叫了cache(),會把發射的專案快取下來,並可以設定快取空間大小,然後根據快取再建立一個Flowable返回
下面是Flowable節選的原始碼
原始碼 @CheckReturnValue @BackpressureSupport(BackpressureKind.FULL) @SchedulerSupport(SchedulerSupport.NONE) public final Flowable<T> cache() { return cacheWithInitialCapacity(16); } @CheckReturnValue @BackpressureSupport(BackpressureKind.FULL) @SchedulerSupport(SchedulerSupport.NONE) public final Flowable<T> cacheWithInitialCapacity(int initialCapacity) { ObjectHelper.verifyPositive(initialCapacity, "initialCapacity"); return RxJavaPlugins.onAssembly(new FlowableCache<T>(this, initialCapacity)); }
注意這裡傳入的int值必須大於0,否則會報錯:java.lang.IllegalArgumentException: initialCapacity > 0 required but it was 0
cache實用場景
實在是時間不夠用,後續完善
國慶假期過得太快,實在是時間不夠用,寫作是個長期的過程,RxJava系列希望能幫助到看過的同學,不喜勿噴哈,謝謝!