tutorial support para inyección for español dummies dependencias dagger2 con android dependency-injection dagger-2

android - support - Dagger 2 ciclo de vida de un componente, módulo y alcance



dagger2 tutorial español (1)

He leído muchas publicaciones y tutoriales sobre dagger 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

¿Qué determina el ciclo de vida de un componente (gráfico de objetos) en Dagger 2?

etc.

Pero todavía estoy confundido sobre el ciclo de vida de un componente y cómo se relaciona con el módulo y el alcance. Quiero asegurarme de no crear varias instancias de un objeto cuando solo quiero un Singleton. Espero que alguien pueda arrojar algo de luz sobre esto:

¿Cuál es el ciclo de vida de un componente que está integrado en la clase de aplicación?

¿Cuál es el ciclo de vida de un componente que está construido en la clase Activity o Fragment?

Si quiero una instancia singleton de un componente, ¿debo anotar el componente con @Singleton o un ámbito personalizado y construir ese componente en la clase de la aplicación?

Si construyo un componente en la clase de la aplicación, ¿significa eso que todas las instancias de objeto disponibles a través de este componente serán una instancia de singleton en toda la aplicación hasta que la aplicación muera o se reinicie?

Tengo un componente con un ámbito personalizado, digamos @ActivityScope, y creo ese componente en una Actividad. ¿Las instancias del objeto inyectadas a través de este componente se destruirán automáticamente después de llamar a esta actividad en DestroY ()?

Nuevamente tengo un componente con un alcance personalizado, digamos @ActivityScope, y construyo este componente en ActivityA y ActivityB, ¿ActivityA y ActivityB compartirán las mismas instancias de objetos de este componente o tendrán sus propias instancias del mismo objeto?


Cómo lo entiendo:

Y tenga en cuenta dos cosas (cuando leí por primera vez 1) me hizo todo más limpio):

1) Los componentes viven tanto como lo desees o siempre que la clase que creó el componente no se haya destruido (como actividad o fragmento de Android)

2) Si no anota, proporciona métodos con anotación (debe ser la misma que la anotación de componente) se crearán nuevos objetos cada vez que los solicite.

¿Cuál es el ciclo de vida de un componente que está integrado en la clase de aplicación?

El componente integrado en la clase de aplicación vive todo el tiempo que desee. Quiero decir que puedes crearlo en cualquier momento y eliminarlo en cualquier momento, siempre y cuando lo crees en clase que amplía la clase de aplicación de Android (de esta manera, el objeto componente vivirá mientras se ejecute tu aplicación de Android) en contraste con el componente que está construido en la clase de actividad: vivirá mientras viva la actividad, por lo que se puede destruir, por ejemplo, en el cambio de orientación. Tenga en cuenta que si por alguna razón no creó su ApplicationComponent en el método onCreate () de la clase Application (por ejemplo, lo creó más adelante cuando sucedió algo) puede destruirse (anularse) cuando el sistema operativo Android tiene poca memoria y el usuario cerró su aplicación, y luego cuando el usuario regresa a su aplicación (a la última actividad visible) cuando se ha matado antes y le pide al componente de su aplicación que haga algo, luego verifique si no es nulo

¿Cuál es el ciclo de vida de un componente que está construido en la clase Activity o Fragment?

Lo respondí parcialmente en la respuesta anterior. Si creas tu componente dentro de Fragmento / Actividad, vive todo el tiempo que quieras o mientras la actividad o el fragmento no se destruyan debido a cambios de orientación o poca memoria.

Si quiero una instancia singleton de un componente, ¿debo anotar el componente con @Singleton o un ámbito personalizado y construir ese componente en la clase de la aplicación?

Depende de dónde desee usar este singleton. Si quieres singleton en una sola actividad puedes crear, por ejemplo @ActivityScope anotación y anotar, proporcionar métodos y ActivityComponent con esta anotación, luego crear tu ActivityComponent dentro del método de Actividad onCreate () y tienes un singleton mientras viva tu actividad (puede ser útil si planea tener un singleton compartido entre diferentes fragmentos de la misma actividad). Si desea un singleton entre diferentes actividades / fragmento en la aplicación, la mejor manera de hacerlo sería crearlo en AppModule y anotar proporcionar el método y el componente de la aplicación con la anotación singleton.

Si construyo un componente en la clase de la aplicación, ¿significa eso que todas las instancias de objeto disponibles a través de este componente serán una instancia de singleton en toda la aplicación hasta que la aplicación muera o se reinicie?

Si anota proporcionar métodos con la anotación @Singleton, entonces sí

Tengo un componente con un ámbito personalizado, digamos @ActivityScope, y creo ese componente en una Actividad. ¿Las instancias del objeto inyectadas a través de este componente se destruirán automáticamente después de llamar a esta actividad en DestroY ()?

Nuevamente tengo un componente con un alcance personalizado, digamos @ActivityScope, y construyo este componente en ActivityA y ActivityB, ¿ActivityA y ActivityB compartirán las mismas instancias de objetos de este componente o tendrán sus propias instancias del mismo objeto?

Tendrán sus propias instancias