2

Controller + EventBus模式在Android中運行得非常好,但到處都是觸發事件變得非常混亂。如果一個控制器要求多次加載相同的數據,那麼首次啓動加載很容易,並且在加載時忽略後續請求,並在加載完成後開始監聽將來的加載請求。我怎麼能做到這一點與RxJava(使用MVP主持人?)如何用RxJava演示者替換EventBus模式?

方案

我在我的Android應用程序一個單ColorModel加載我最喜歡的顏色(from multiple sources),作爲Observable<String>(字符串==十六進制編碼)。

ColorPresenter掛鉤插入ColorModel,所述String十六進制編碼轉換爲可顯示在一個ColorView對象Color

這是我的邏輯的主要部分:

  1. Observable<String> getColor()(從ColorModel
  2. Observable<Color> getColorForView()(從ColorPresenter
  3. subscribe()(在ColorView

問題

  • #1在每個訂閱上創建。如果我有多個主持人打電話給#1,這非常浪費。我不想重複這個步驟(只在第一次調用時啓動,然後緩存)。
  • 當我在onStop()期間取消訂閱時,#2被取消(需要),但取消訂閱的泡泡最多也被取消(不需要)。
+0

您需要向我們展示您的代碼。只是描述這是不夠的。 – Enigmativity

+0

另外,第一個問題似乎並不是什麼大不了的事情 - 可觀察性的計算花費如何? – Enigmativity

+0

@Enigmativity假裝它是非常昂貴的計算(我實際上沒有加載喜歡的顏色,它是一個簡化版本) – ZakTaccardi

回答

0

你應該看看運營商cache。您可以使用它並將引用存儲在某處的可觀察位置(例如ConnectableObservable)。

請小心,因爲您無法退訂使用cache運算符創建的observable。但在你的情況下,這是你想要的,因爲退訂#2不會影響#1生命週期了。