41 votes

Cycle de vie Dagger 2 d'un composant, d'un module et d'une portée

J'ai lu beaucoup de posts et des tutoriels à propos de la dague 2:

http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/

https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2

http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/

https://github.com/konmik/konmik.github.io/wiki/Snorkeling-with-Dagger-2

Ce qui détermine le cycle de vie d'un composant (objet graphique) dans Dague 2?

etc.

Mais je suis toujours confus au sujet de la durée de vie d'un composant, et comment il se rapporte à un module et la portée. Je veux m'assurer de ne pas créer plusieurs instances d'un objet lorsque je veux seulement un Singleton. J'espère que quelqu'un peut faire la lumière sur ces:

Quel est le cycle de vie d'un composant qui est construit dans la classe d'application?

Quel est le cycle de vie d'un composant intégré dans l'Activité ou le Fragment de classe?

Si je veux une instance du singleton à partir d'un composant, puis-je doit annoter le composant avec @Singleton ou sur mesure à la portée et à bâtir une composante dans la classe d'application?

Si je créer un composant dans la classe d'application, est-ce que toutes les instances d'objet disponibles par le biais de ce composant est une instance du singleton tout au long de l'application jusqu'à ce que l'application est tué ou redémarré?

J'ai un composant avec une portée personnalisée disons @ActivityScope, et je créer ce composant dans une Activité, les instances d'objets injectés à travers cette composante sera détruit automatiquement à l'issue de cette activité est onDestroy() est appelée?

De plus, j'ai un composant avec une portée personnalisée disons @ActivityScope, et j'ai construit ce composant dans ActivityA et ActivityB, sera ActivityA et ActivityB partagent le même objet instances de ce composant ou ils ont leurs propres instances du même objet?

35voto

Adrian Kapuscinski Points 492

Comment je le comprends:

Et garder à l'esprit deux choses (quand j'ai lu 1) qu'il a fait tout un nettoyant pour moi):

1)Composants de vivre aussi longtemps que vous le souhaitez, ou aussi longtemps que la classe qui a créé le composant n'a pas été détruit (comme android activité ou fragment)

2)Si vous n'avez pas d'annoter vous fournir des méthodes avec l'annotation (doit être le même que composant d'annotation) de nouveaux objets seront créés chaque fois que vous demandez pour eux

Quel est le cycle de vie d'un composant qui est construit dans la classe d'application?

Composant intégré dans la classe d'application vit aussi longtemps que vous le souhaitez. Je veux dire que vous pouvez créer à tout moment et de le retirer à tout moment aussi longtemps que vous le créer dans la classe qui étend la classe de l'Application android de classe (de cette façon component object vivent aussi longtemps que votre Application Android est en cours d'exécution, contrairement à la composante qui est construit dans l'activité de la classe, il vivra aussi longtemps que l'activité est vivant, donc il peut être détruit par exemple sur le changement d'orientation. Gardez à l'esprit que si pour quelque raison vous n'avez pas créé votre ApplicationComponent dans onCreate() la méthode de classe de l'Application (par exemple vous avez créé plus tard, lorsque quelque chose s'est passé), il peut être détruit (annulée) lors de l'OS Android est faible sur la mémoire et l'utilisateur a fermé votre application, et ensuite, lorsque l'utilisateur revient à votre application (à la dernière activité visible) quand il a été tué plus tôt, et vous demandez à votre application composant de faire quelque chose de vérifier ensuite si elle n'est pas null

Quel est le cycle de vie d'un composant intégré de l'Activité ou de l' Fragment de classe?

J'ai en partie répondu dans la réponse ci-dessus. Si vous créez votre composant à l'intérieur de Fragment/Activité il vit aussi longtemps que vous le souhaitez ou en tant qu'une activité ou un fragment n'est pas détruite pour cause de changement d'orientation ou de la mémoire faible

Si je veux une instance du singleton à partir d'un composant, puis-je doit annoter le composant avec @Singleton ou sur mesure à la portée et à bâtir composant dans la classe d'application?

Il dépend de l'endroit où vous souhaitez utiliser ce singleton. Si vous voulez singleton dans une seule activité, vous pouvez créer par exemple @ActivityScope d'annotation et d'annoter fournir des méthodes et ActivityComponent avec cette annotation, puis vous créez votre ActivityComponent à l'intérieur onCreate() de l'Activité de la méthode et vous avez un singleton tant que votre activité vie (il peut être utile si vous prévoyez d'avoir un singleton partagé entre les différents fragments de la même activité). Si vous voulez singleton entre les différents acctivities/fragment en application la meilleure façon de le faire serait de créer dans AppModule et annoter fournir de la méthode et de l'application de la composante avec singleton annotation.

Si je créer un composant dans la classe d'application, est-ce à dire tous les les instances d'objet disponibles par le biais de cette composante sera un instance du singleton tout au long de l'application jusqu'à ce que l'application est tué ou redémarrage?

Si vous annoter fournir des méthodes avec @Singleton annotation alors oui

J'ai un composant avec une portée personnalisée disons @ActivityScope, et je construire cette composante dans une Activité, les instances de l'objet injectée par le biais de cette composante sera détruit automatiquement après cette l'activité onDestroy() est appelée?

Oui

De plus, j'ai un composant avec une portée personnalisée disons @ActivityScope, et j'ai construit ce composant dans ActivityA et ActivityB, sera ActivityA et ActivityB partagent le même objet instances de ce composant ou ils ont leurs propres instances du même objet?

Ils ont leurs propres instances

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X