Android 匕首2,自定义范围模块的销毁

Android 匕首2,自定义范围模块的销毁,android,dagger-2,Android,Dagger 2,使用我定义的@ActivityScope @Scope @Retention(RUNTIME) public @interface ActivityScope { } 并在Activity.onCreate()中实例化相应的ActivityModule,如下所示 mActivityComponent = DaggerActivityComponent.builder() .activityModule(new ActivityModule(thi

使用我定义的
@ActivityScope

    @Scope
    @Retention(RUNTIME)
    public @interface ActivityScope { }
并在
Activity.onCreate()
中实例化相应的
ActivityModule
,如下所示

    mActivityComponent = DaggerActivityComponent.builder()
        .activityModule(new ActivityModule(this))
        .build();
通过这样做,我将模块的生命周期附加到活动的生命周期。将为每个新活动创建所有模块实例。在这方面,一切都很好


我的实际问题是,当活动被实际销毁时,销毁模块组件(例如,删除服务回调等)的正确/最佳方式是什么?Dagger2本身是否为此提供了任何功能?

@Scope
注释提供编译时验证,并且在模块提供程序方法上,它使Dagger2创建一个作用域提供程序,该提供程序只允许在该特定组件中为每个作用域创建一个实例


它实际上并没有做更多的事情,所以如果您需要显式地取消注册活动中的回调,那么您可能应该在活动中注入这些依赖项,然后自己在
onDestroy()

中手动取消注册,这也是我的第一个想法。我甚至不需要注入实例,我可以通过组件直接访问它们。但这意味着要在onDestroy()中编写样板代码,我希望避免这种情况。。。在构造函数中注册它们,然后为相应的activity onDestroy()发送事件,这将使它们全部取消订阅和注册。感谢您的思考。这意味着Dagger不支持任何开箱即用的模块生命周期。理想的解决方案是只调用onDestroy()一次,然后生成每个实例的onDestroy()的其余代码。Dager2中是否有用于编写此类生成器的扩展API?我有点想知道,您是否应该在provider方法中提供
Activity
作为参数,并只需在
List
中将所有订阅的内容添加到
List
中,该活动在
onDestroy()中迭代和取消订阅
这是一个有趣的选择。至少这是我可以做的。我还打开了一个自动售票机,询问如何为模块添加某种生命周期。让我们看看他们的答案。