2017-09-12 2 views
0

Je suis nouveau à Dagger 2 et j'ai réussi à comprendre le fonctionnement de base, mais je ne comprends pas vraiment comment les portées personnalisées fonctionnent vraiment. Alors, est ici le problème: Dire que j'ai ActivityScope défini comme ceci:Comment fonctionnent les composants Dagger 2?

@Scope 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ActivityScope { 
} 

et un composant scope:

@ActivityScope 
@Component(modules = ActivityModule.class) 
public interface ActivityComponent { 
    /* ... */ 
} 

La façon dont je comprends bien, les objets fournis par ce composant aura une seule instance vit aussi longtemps que le composant vit, mais qu'est-ce qui détermine la durée de vie d'un composant? Est-ce l'endroit où le composant est construit (Application, dans une Activité, Fragment ...), ou est-ce autre chose?

Je ne sais pas si c'est le bon endroit pour poser cette question mais toute aide est la bienvenue. Merci.

fournies par ce composant

Répondre

2

La façon dont je le comprends, les objets ont une seule instance qui vit aussi longtemps que la vie des composants [...]

correcte. Les objets de portée fournis par ce composant n'existeront que une fois. Cela n'est pas vrai pour les objets non délimités, qui sont recréés à chaque fois et peuvent être fournis par n'importe quel composant.

[...] mais qu'est-ce qui détermine la durée de vie d'un composant? Est-ce l'endroit où le composant est construit (Application, dans une Activité, Fragment ...), ou est-ce autre chose?

Vous le faites. Si vous décidez de stocker votre composant dans une variable statique —, veuillez ne pas — alors ce composant reste actif tant que votre application est active et en cours d'exécution (et risque de fuir l'activité dans le processus).

Si vous gardez votre composant dans votre activité, il sera ramassé avec le reste, une fois l'activité détruite.

+0

Merci pour la clarification, vous avez été très utile. –