web-dev-qa-db-fra.com

La bibliothèque d'événements comme Otto ou EventBus est-elle un moyen recommandé de gérer les relations entre les activités, les fragments et les threads d'arrière-plan

Dans la plupart des cas, lorsqu'il s'agit d'un cas

  • Thread utilisateur (AsyncTask) pour effectuer le traitement en arrière-plan
  • Renvoie le résultat calculé à Activity ou Fragment
  • Activity ou Fragment la recréation peut se produire avant que le thread utilisateur ne termine son traitement en arrière-plan

Jusqu'à présent, à partir de nombreuses sources fiables, je peux voir que la méthode recommandée utilise Fragment conservé

Sources

De temps en temps, j'ai entendu que les bibliothèques de bus d'événements sont bonnes pour gérer les relations entre les activités, les fragments et les threads d'arrière-plan. (Veuillez vous référer à https://github.com/greenrobot/EventBus . Il indique que fonctionne bien avec les activités, les fragments et les threads d'arrière-plan)

Je suis tombé sur des bibliothèques de bus d'événements très populaires

Je me demandais, en ce qui concerne les relations entre les activités, les fragments et les threads d'arrière-plan, en quoi l'approche du bus d'événements est-elle différente de l'approche Fragment conservé ?

De quelles manières est une méthode recommandée?

44
Cheok Yan Cheng

Le bus d'événements et Otto ne sont pas des "moyens recommandés" par le Android guide du développeur principalement parce qu'ils sont des bibliothèques tierces pour simplifier la tâche. Et je crois qu'Otto est assez nouveau, donc les anciens guides ne l'utilisent évidemment pas.

Personnellement, j'aime Otto, c'est ce que j'utilise et je n'ai eu aucun problème jusqu'à présent. Mais bien sûr, c'est parce que cela convenait à mes cas d'utilisation.

J'ai un exemple sur la façon dont j'ai utilisé Otto ici .

EDITER du futur: si vous avez besoin d'un bus d'événements, greenrobot/EventBus est meilleur qu'Otto. De plus, dans certains cas, LiveData<T> est parfaitement suffisant au lieu d'utiliser le bus d'événements (qui, au lieu d'émettre des événements à n'importe qui, n'émet qu'aux abonnés).

17
EpicPandaForce

Je me demandais, en ce qui concerne les relations entre les activités, les fragments et les threads d'arrière-plan, en quoi l'approche du bus d'événements est-elle différente de l'approche du fragment conservé?

De quelles manières est une méthode recommandée?

Je pense que vous comprenez mal deux concepts:

1) Empêcher une tâche de se créer encore et encore lorsque vous faites pivoter votre appareil

2) envoi de messages d'un thread vers une activité ou d'un service vers un fragment ou ...

Lorsque nous mettons une tâche à l'intérieur d'un fragment, nous ne voulons tout simplement pas recommencer la refaire si nous tournons. Nous voulons également en récupérer le résultat, par exemple, nous voulons mettre à jour une imageView, mais si vous passez une imageView à une tâche asynctrope, puis que vous faites pivoter votre appareil si vous stockez l'imageView en tant que référence faible, votre imageView est nulle une fois l'activité terminée. détruit et si vous le stockez comme une référence forte, vous fuyez l'activité. donc une meilleure idée est de la mettre à l'intérieur d'un fragment et de stocker la vue comme une référence faible et si l'activité onCreate est appelée mise à jour de cette référence.

EventBus et Otto sont de très bonnes bibliothèques pour envoyer des messages entre n'importe quel composant ou thread. vous pouvez les utiliser ou Android solution native comme la création d'interface ou localBroadcastManager ou gestionnaire.

en quoi l'approche du bus d'événements est-elle différente de l'approche du fragment conservé?

Je n'ai pas examiné le code source de ceux-ci mais je pense qu'ils ont créé un objet de file d'attente singleton et stockent vos messages à l'intérieur et le retirent pour transmettre vos messages à leurs auditeurs.

3
mmlooloo