Жизненный цикл кинжала 2 компонента, модуля и области действия

Я прочитал много сообщений и учебников о кинжале 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

Что определяет жизненный цикл компонента (графа объектов) в кинжале 2?

и т.п.

Но я все еще запутался в жизненном цикле компонента и о том, как он относится к модулю и области. Я хочу, чтобы я не создавал несколько экземпляров объекта, когда мне нужен только Singleton. Надеюсь, кто-то может пролить свет на них:

Каков жизненный цикл компонента, который встроен в класс приложения?

Каков жизненный цикл компонента, который встроен в класс Activity или Fragment?

Если я хочу экземпляр singleton из компонента, должен ли я аннотировать компонент с помощью @Singleton или настраиваемой области видимости и построить этот компонент в классе приложения?

Если я построю компонент в классе приложения, означает ли это, что все экземпляры объектов, доступные через этот компонент, будут экземпляром singleton во всем приложении до тех пор, пока приложение не будет убито или не перезапущено?

У меня есть компонент с настраиваемой областью, скажем, @ActivityScope, и я создаю этот компонент в Activity, будут ли экземпляры объектов, введенные через этот компонент, быть уничтожены автоматически после вызова этой функции onDestroy ()?

Опять же, у меня есть компонент с настраиваемой областью, скажем, @ActivityScope, и я создаю этот компонент в ActivityA и ActivityB, будут ли ActivityA и ActivityB совместно использовать те же экземпляры объектов из этого компонента, или у них будут свои собственные экземпляры одного и того же объекта?

Solutions Collecting From Web of "Жизненный цикл кинжала 2 компонента, модуля и области действия"

Как я это понимаю:

И помните о двух вещах (когда я впервые прочитал 1), это сделало меня более чистым):

1) Компоненты живут так долго, как вы хотите, до тех пор, пока класс, который создал компонент, не был уничтожен (например, активность или фрагмент андроида)

2) Если вы не комментируете, вы предоставляете методы с аннотацией (должны быть такими же, как аннотация компонента), новые объекты будут создаваться каждый раз, когда вы запрашиваете их

Каков жизненный цикл компонента, который встроен в класс приложения?

Компонент, построенный в классе приложений, живет столько, сколько захотите. Я имею в виду, что вы можете создать его в любое время и удалить его в любое время, пока вы создаете его в классе, который расширяет класс приложения Android (этот компонент компонента будет работать до тех пор, пока работает приложение Android) в отличие от компонента, который встроен В классе активности – он будет жить до тех пор, пока активна деятельность, поэтому она может быть уничтожена, например, при изменении ориентации. Имейте в виду, что если по какой-то причине вы не создали свой ApplicationComponent в методе onCreate () класса Application (например, позже вы его создали, когда что-то произошло), он может быть уничтожен (nulled), когда ОС Android будет недоступна для памяти и пользователя Закрыли приложение, а затем, когда пользователь вернется к вашему приложению (для последней видимой активности), когда он был убит раньше, и попросите свой компонент приложения что-то сделать, а затем проверьте, не является ли он недействительным

Каков жизненный цикл компонента, который встроен в класс Activity или Fragment?

Я частично ответил на это в ответе. Если вы создаете свой компонент внутри Fragment / Activity, он живет до тех пор, пока вы хотите или до тех пор, пока активность или фрагмент не будут уничтожены из-за изменения ориентации или низкой памяти

Если я хочу экземпляр singleton из компонента, должен ли я аннотировать компонент с помощью @Singleton или настраиваемой области видимости и построить этот компонент в классе приложения?

Это зависит от того, где вы хотите использовать этот синглтон. Если вы хотите singleton в одиночной активности, вы можете создать, например, @ActivityScope аннотацию и аннотировать, предоставить методы и ActivityComponent с этой аннотацией, тогда вы создаете свой ActivityComponent внутри метода onCreate () Activity, и у вас есть синглтон, пока ваша деятельность живет (может Будьте полезны, если вы планируете использовать одноэлементный обход между разными фрагментами из той же активности). Если вам нужен синглтон между различными акцентами / фрагментами в приложении, лучшим способом сделать это было бы его создание в AppModule и аннотировать компонент метода и приложения с помощью аннотации singleton.

Если я построю компонент в классе приложения, означает ли это, что все экземпляры объектов, доступные через этот компонент, будут экземпляром singleton во всем приложении до тех пор, пока приложение не будет убито или не перезапущено?

Если вы аннотируете предоставить методы с аннотацией @Singleton, то да

У меня есть компонент с настраиваемой областью, скажем, @ActivityScope, и я создаю этот компонент в Activity, будут ли экземпляры объектов, введенные через этот компонент, быть уничтожены автоматически после вызова этой функции onDestroy ()?

да

Опять же, у меня есть компонент с настраиваемой областью, скажем, @ActivityScope, и я создаю этот компонент в ActivityA и ActivityB, будут ли ActivityA и ActivityB совместно использовать те же экземпляры объектов из этого компонента, или у них будут свои собственные экземпляры одного и того же объекта?

У них будут свои собственные экземпляры