s-h*_*ter 40 android dependency-injection dagger-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
等等
但我仍然对组件的生命周期以及它与模块和范围的关系感到困惑.我想确保在我只需要Singleton时不创建对象的多个实例.希望有人可以对这些有所了解:
在应用程序类中构建的组件的生命周期是什么?
在Activity或Fragment类中构建的组件的生命周期是什么?
如果我想从组件中获取单例实例,是否必须使用@Singleton或自定义范围对组件进行批注并在应用程序类中构建该组件?
如果我在应用程序类中构建一个组件,这是否意味着通过此组件可用的所有对象实例将是整个应用程序中的单例实例,直到该应用程序被终止或重新启动?
我有一个带有自定义范围的组件,比如@ActivityScope,我在一个Activity中构建该组件,在调用此活动的onDestroy()之后,通过该组件注入的对象实例会自动销毁吗?
我再一次有一个带有自定义范围的组件,比如@ActivityScope,我在ActivityA和ActivityB中构建这个组件,ActivityA和ActivityB是否会从这个组件共享相同的对象实例,或者它们将拥有自己的同一对象实例?
小智 34
我怎么理解:
并记住两件事(当我第一次阅读1时)它让一切都变得更清洁了):
1)只要你想要它,或只要创建组件的类没有被销毁(如android活动或片段),组件就会存活
2)如果您没有注释,则提供带注释的方法(必须与组件注释相同)每次请求时都会创建新对象
在应用程序类中构建的组件的生命周期是什么?
构建在应用程序类中的组件可以根据需要使用.我的意思是,你可以在任何时间创建它,并在任何时候,只要你在课堂上创建一个扩展Android应用类(这样一来,只要组件对象,将生活作为你的Android应用程序正在运行),相比于组件的内置删除在活动类中 - 只要活动处于活动状态,它就会存在,因此可能会在方向更改时被销毁.请记住,如果由于某种原因,您没有在Application类的onCreate()方法中创建ApplicationComponent(例如,您在以后发生某事时创建了它),那么当Android OS内存和用户不足时,它可以被销毁(无效)关闭你的应用程序,然后当用户回到你的应用程序(最后一次可见活动)时,它已被杀死,你要求你的应用程序组件做某事,然后检查它是否为空
在Activity或Fragment类中构建的组件的生命周期是什么?
我在上面的回答中部分回答了 如果您在Fragment/Activity中创建组件,只要您想要或只要活动或片段不因方向改变或内存不足而被破坏,它就会存在
如果我想从组件中获取单例实例,是否必须使用@Singleton或自定义范围对组件进行批注并在应用程序类中构建该组件?
这取决于你想要使用这个单身人士的地方.如果你想在单个活动中使用单例,你可以创建例如@ActivityScope注释和注释提供方法和带有这个注释的ActivityComponent,然后在onCreate()Activity方法中创建你的ActivityComponent,只要你的活动存在,你就有一个单例(它可能是如果您计划在同一活动的不同片段之间共享一个单例,请提供帮助.如果你想不同acctivities之间的单身在app /片段这样做将是对的AppModule创建和注释提供单标注方法和应用程序组件的最佳途径.
如果我在应用程序类中构建一个组件,这是否意味着通过此组件可用的所有对象实例将是整个应用程序中的单例实例,直到该应用程序被终止或重新启动?
如果您使用@Singleton注释注释提供方法,则为yes
我有一个带有自定义范围的组件,比如@ActivityScope,我在一个Activity中构建该组件,在调用此活动的onDestroy()之后,通过该组件注入的对象实例会自动销毁吗?
是
我再一次有一个带有自定义范围的组件,比如@ActivityScope,我在ActivityA和ActivityB中构建这个组件,ActivityA和ActivityB是否会从这个组件共享相同的对象实例,或者它们将拥有自己的同一对象实例?
他们将拥有自己的实例