Dans la plupart des cas, lorsqu'il s'agit d'un cas
AsyncTask
) pour effectuer le traitement en arrière-planActivity
ou Fragment
Activity
ou Fragment
la recréation peut se produire avant que le thread utilisateur ne termine son traitement en arrière-planJusqu'à présent, à partir de nombreuses sources fiables, je peux voir que la méthode recommandée utilise Fragment conservé
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?
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).
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.