Est l'aide de bibliothèque d'événements, comme Otto ou EventBus un recommandé de la façon 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 de cas
- Utilisateur thread (
AsyncTask
) pour effectuer un traitement en arrière-plan - Passe en retrait résultat calculé retour à
Activity
ouFragment
Activity
ouFragment
re-création qui pourrait se produire avant que l'utilisateur thread termine son traitement en arrière-plan
Jusqu'ici, à partir de nombreuses sources fiables, je peux voir la méthode recommandée est d'utiliser
Conservé Le Fragment
Sources
- Meilleure pratique: AsyncTask lors de changement d'orientation
- http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
- http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
De temps en temps, j'ai entendu parler de l'événement de bus bibliothèques est bon pour la manipulation des 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 affirme que fonctionne bien avec des Activités, des Fragments, et les threads d'arrière-plan)
Je suis tombé sur quelques très populaire événement bus bibliothèques
Je me demandais, quand vient pour gérer les relations entre les Activités, les Fragments, et les threads d'arrière-plan, comment est l'événement de bus approche différente de Conservé le Fragment approche?
Quelles façons est une méthode recommandée?
Vous devez vous connecter pour publier un commentaire.
L'événement de bus et Otto ne sont pas des "moyens recommandés" par l'Android developer guide, principalement parce qu'ils sont bibliothèques tierces afin de simplifier la tâche. Et je crois que Otto est assez nouveau, plus anciens guides ne sont évidemment pas à l'utiliser.
Personnellement, j'aime Otto, c'est ce que j'utilise et je n'ai pas eu de problèmes avec elle jusqu'à présent. Mais bien sûr, c'est parce qu'il convenait à mon cas d'utilisation.
J'ai un exemple sur la façon dont j'ai utilisé Otto ici.
MODIFIER dans l'avenir: si vous avez besoin d'un bus d'événement,
greenrobot/EventBus
est mieux que Otto. Aussi, dans certains cas,LiveData<T>
est tout à fait suffisante au lieu d'utiliser de l'événement de bus (qui, au lieu d'émettre des événements pour quiconque, émet seulement pour les abonnés).paused
estfalse
.EventBus
est réellement meilleur queOtto
, maintenant que je l'ai utilisé à la fois.Je pense que vous vous méprenez deux concepts:
1) la prévention d'une tâche de créer encore et encore lorsque vous faites pivoter votre appareil
2) l'envoi de messages à partir d'un thread pour une activité ou d'un service à un fragment ou...
Lorsque nous mettre une tâche à l'intérieur d'un fragment nous ne voulons pas commencer à nouveau si nous sommes en rotation. Nous voulons aussi avoir le résultat de retour à partir de, par exemple, nous voulons mettre à jour une imageView mais si vous passez une imageView à une asynctask et puis vous faites pivoter votre appareil si vous stockez l'imageView comme une référence faible, alors votre imageView est null après l'activité a détruit et si vous le stocker comme une référence forte, alors vous fuite de l'activité. donc meilleure idée est de le mettre à l'intérieur d'un fragment et le stockage de la vue comme une référence faible, et si l'activité onCreate est appelé mise à jour de la référence.
EventBus et Otto sont très bonnes bibliothèques pour envoyer des messages entre les composants ou les threads. vous pouvez utiliser ceux-ci ou android native solution, comme la création de l'interface ou localBroadcastManager ou gestionnaire.
Je n'ai pas regardé dans le code source de ces mais je pense qu'ils ont créé un singleton file d'attente de l'objet et de stocker vos messages à l'intérieur et de la file d'attente pour passer vos messages à leurs auditeurs.
Communication entre un simple
Activity
etFragment
peut être facilement établir dans de nombreuses façons, mais la façon la plus élégante est par la création et l'utilisation simpleinterface
classe. Mais pour un tel scénario, activité que l'hôte d'un fragment qui montre un autre des fragments à l'aide de viewpager, alors cet enfant fragment doit communiquer à l'activité parent ou un fragment, c'est là que EventBus peut être utiliser car il n'y aura aucun moyen de communiquer avec. EventBus devrait seulement être utilisé quand il n'y a pas d'autre moyen pour envoyer des données à une autre classe.