Il s'agit plus d'une question générale que d'une question spécifique.Architecture de l'application cliente Android Ble
Fondamentalement, je développe une application Android qui communique avec Ble Périphérique périphérique. Je gère la communication Ble en utilisant la bibliothèque RxAndroidBle. En ce qui concerne le modèle général, j'ai décidé d'essayer Mosby MVI, cependant ce n'est pas si important. Ce que j'ai fait jusqu'à maintenant, c'est que j'ai créé la classe BluetoothManager qui est chargée d'effectuer toutes les opérations sur le périphérique Ble. Cette classe est un singleton (je sais que ce n'est pas recommandé sur Android) et je l'ai délimité en utilisant Dagger, que cela est injecté uniquement pour les interacteurs qui devraient effectuer une certaine communication Ble. Cette classe retourne Observables avec quelques POJO, qui sont transformés en ViewStates en interacteur et que déplacés plus haut vers l'interface utilisateur. Les abonnements sont dans les présentateurs suivant le modèle Mosby MVI.
Fondamentalement, grâce à cela, je traite ce périphérique Ble comme une source de données régulière, comme un service de rénovation ou de toute DB. Et c'était tout à fait bien tant que j'exécutais des opérations atomiques comme l'écriture et la lecture de certaines caractéristiques. Le problème est quand je dois lancer une sorte de synchronisation qui peut prendre beaucoup de temps, devrait être fait en arrière-plan, ne devrait pas être lié à l'interface utilisateur, mais sur certains écrans, l'utilisateur devrait être en mesure de voir les progrès. Ici j'ai commencé à penser à utiliser Android Service et mettre toute la logique Ble Communication là, mais à mon avis, l'utilisation du service Android brise toutes les tentatives de séparation logique et je ne pouvais pas trouver un bon moyen de s'y adapter. La troisième option consistait à avoir un service de synchronisation et de préservation de BluetoothManager pour les opérations atomiques limitées à l'interface utilisateur, mais je pense que c'est compliqué et je serais ravi d'avoir tous les éléments Ble au même endroit.
Je sais que c'est long mais tout va à une question -> quel serait le meilleur modèle à suivre lors de la communication avec l'appareil Ble sur Android pour préserver la séparation des calques et la garder aussi indépendante que possible. Je n'ai pas pu trouver de bons articles sur la façon de gérer cela, s'il y en a, ils sont assez démodés, n'utilisant pas l'approche Rx. Si c'est trop générique, je peux spécifier plus de détails, mais je cherche plutôt un conseil d'architecture plutôt que des extraits de code.
Merci pour votre réponse! J'essayais d'adapter votre réponse précédente de [ici] (https://stackoverflow.com/questions/43042785/android-mosby-mvi-bind-to-service-in-presenter?rq=1) mais je l'ai trouvé tout à fait difficile. Que voulez-vous utiliser comme DataObservable? Certains BehaviourSubject et je voudrais tirer sur Next dès que je reçois de la valeur de l'appareil? Et aussi ce que vous diriez à propos de dataObservables multiples car je peux lire/écrire beaucoup sur le périphérique et tous ceux qui peuvent être facilement mappés à un type d'objet. – Jogosb
Cette réponse était sur un service lié dont vous n'avez certainement pas besoin! Bien sûr, si cela vous facilite la tâche, plusieurs données observables peuvent être utiles. Je préfère généralement un seul, mais cela dépend des données et je n'ai aucune idée de ce que vous faites exactement. Jetez un oeil à PublishRelay (au lieu de BehaviorSubject) – sockeqwe