これは特定のものではなく一般的な質問です。Android Bleクライアントアプリのアーキテクチャ
私は基本的にBle周辺機器と通信するAndroidアプリを開発しています。 RxAndroidBleライブラリを使用してBle通信を処理します。一般的なパターンに関しては、Mosby MVIを試してみることにしましたが、それほど重要でないのは です。
私がこれまで行ったことは、Bleデバイス上ですべての操作 を実行する役割を担うBluetoothManagerクラスを作成したことです。このクラスはシングルトンです(Androidではお勧めできません)、Daggerを使ってスコープを設定しました。 これはBle通信を実行するインタラクタにのみ注入されます。 このクラスはObservablesをいくつかのPOJOとともに返します。これらのPOJOは、インタラクタのViewStatesに変換され、UIの上位に移動されます。 サブスクリプションは、Mosby MVIパターンに従う発表者にあります。
基本的に、私はこのBle Deviceを通常のデータソースとして扱いました。これは、改造サービスやdbと同じです。 それは、私がいくつかの単一の特徴を書いたり読んだりするような原子操作を実行していれば、まったく問題ありませんでした。
問題は、かなりの時間がかかり、バックグラウンドで実行する必要がある同期を起動する必要があるときです。 はUIにバインドしないでください。ただし、一部の画面ではユーザーは進行状況を参照してください。 ここで私はAndroidサービスを使ってBle Communicationロジックを実装することを考え始めましたが、 私の意見では、Androidサービスを使用するとロジック分離の試みが壊れてしまい、そこに適合する良い方法が見つけられませんでした。
第3のオプションは、UIにバインドされたアトミック操作のためにBluetoothManagerを同期化して保存するサービスを持っていましたが、 私はそれが面倒だと思っています。
私は長いですが、すべてが1つの質問に行くことを知っています - > のBleデバイスと通信する際には、レイヤの分離を保ち、可能な限り独立した状態に保つために、 Rxアプローチを使用していないものがある場合は、それを処理するための良い記事が見つかりませんでした。 あまりにも一般的な場合は、詳細をいくつか指定できますが、コードスニペットではなくアーキテクチャ上のアドバイスを探しています。
お返事ありがとうございます!私は[ここ](https://stackoverflow.com/questions/43042785/android-mosby-mvi-bind-to-service-in-presenter?rq=1)からあなたの以前の応答に合うように努めていたが、私はそれをかなり見つけた難しいこのDataObservableとして何を使用しますか?いくつかのBehaviourSubjectと私はそれがデバイスからいくつかの価値を得るたびにonNextを発射するだろうか?また、複数のdataObservablesについては、デバイスにかなりの読み書きをすることができますが、それらのすべてをあるタイプのオブジェクトに簡単にマッピングできるわけではありません。 – Jogosb
この回答は、あなたが確かに必要としない縛られたサービスにありました! これは、複数のデータ観測値よりも簡単に行うことができます。私はたいてい1つだけ好きですが、それはデータに依存しており、あなたが何をしているのか分かりません。 BehaviorSubjectの代わりにPublishRelayを見てください。 – sockeqwe