這是一個更普遍的問題,而不是一個特定的問題。Android Ble客戶端應用程序體系結構
基本上我正在開發一個Android應用程序,它與Ble Peripheral Device進行通信。 我使用RxAndroidBle庫處理Ble通信。至於一般模式,我決定嘗試莫斯比MVI,但是 這並不重要。
我到目前爲止所做的是我創建的BluetoothManager類,它負責執行Ble Device上的所有操作 。這個類是一個Singleton(我知道它不推薦在Android上使用),並且我使用Dagger作爲範圍, 這隻被注入到那些應該執行一些Ble通信的交互器中。 此類返回具有一些POJO的Observables,它們在交互器中轉換爲ViewStates,並向UI中移動更高。 訂閱在Mosby MVI模式下的演示者中。
基本上感謝我把這個Ble設備作爲一個常規的數據源,和一些改造服務或者任何db一樣。 只要我正在進行像寫作和閱讀某些單一特徵的原子操作,那就完全沒問題。
問題是當我需要啓動某種可能需要很長時間的同步時,應該在後臺完成, 不應該綁定到UI,但是在某些屏幕上,用戶應該能夠看到進展。 在這裏我開始考慮使用Android服務並將所有Ble通信邏輯放在那裏,但是在我看來,使用Android服務打破了邏輯分離的任何嘗試,並且找不到適合它的好方法。
第三種選擇是同步和保留BluetoothManager用於界面到UI的原子操作的服務,但是 我認爲這很麻煩,我很高興在所有Ble的東西在一個地方。
我知道這是很長,但是這一切都爲一個問題 - >什麼是Android上 BLE裝置通信保持層分離並保持儘可能獨立時應遵循的最佳模式。 我找不到任何有關處理的好文章,如果有任何文章過時,請不要使用Rx方法。 如果它太泛型,我可以指定一些更多的細節,但我更多的是尋找建築建議,而不是代碼片段。
感謝您的迴應!我試圖去適應你以前的迴應[這裏](https://stackoverflow.com/questions/43042785/android-mosby-mvi-bind-to-service-in-presenter?rq=1),但我發現它相當難。你將使用什麼作爲這個DataObservable?一些BehaviourSubject和我會每當我從設備獲得一些價值時onNext上它?還有,你會怎麼說多個dataObservables,因爲我可以讀/寫很多設備,並不是所有這些都可以很容易地映射到一種類型的對象。 – Jogosb
這個答案是在你肯定不需要的綁定服務上! 當然,如果這使得它更容易比多個數據可觀察到可能是有意義的。我通常只喜歡一個,但這取決於數據,我不知道你到底在做什麼。看看PublishRelay(而不是BehaviorSubject) – sockeqwe