使用Dagger2时,我定义了@ActivityScope
@Scope
@Retention(RUNTIME)
public @interface ActivityScope { }
并在ActivityModule
中实例化相应的Activity.onCreate()
,如下所示。
mActivityComponent = DaggerActivityComponent.builder()
.activityModule(new ActivityModule(this))
.build();
通过这样做,我将模块的生命周期附加到活动的生命周期中。将为每个新活动创建所有模块的实例。在这方面一切正常。
我的实际问题是,当活动被实际销毁时,销毁模块组件(例如删除服务回调等)的正确/最佳方法是什么? Dagger2
本身是否为此提供了任何内容?
答案 0 :(得分:4)
@Scope
注释提供了编译时验证,并且在模块提供程序方法上,它使Dagger2创建了一个范围提供程序,允许在该特定组件中为每个范围创建一个实例。
它实际上并没有做更多的事情,所以如果您需要显式取消注册活动中的回调,那么您应该在活动中注入这些依赖项,并在onDestroy()
中自己手动取消注册它们。