You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Dagger将当前Activity的lifecycleScope注入非Activity类?

能否通过Dagger将当前Activity的lifecycleScope注入到非Activity类中?

可以实现,而且能让协程在Activity销毁时自动终止,无需手动调用cleanUp()方法。以下是优化后的实现方案:

1. 为Activity的lifecycleScope提供Dagger绑定

在Activity对应的Dagger模块中,提供与当前Activity生命周期绑定的LifecycleCoroutineScope实例:

@Module
class ActivityModule {
    @Provides
    @ActivityScope
    fun provideActivityLifecycleScope(activity: AppCompatActivity): LifecycleCoroutineScope {
        return activity.lifecycleScope
    }
}

@ActivityScope保证该scope实例与Activity的生命周期完全绑定,每个Activity实例都会获取到自己专属的lifecycleScope。

2. 修改Foo类的注入逻辑

直接注入LifecycleCoroutineScope即可,无需额外命名注解;同时可以移除cleanUp()方法,因为lifecycleScope会在Activity销毁时自动取消所有子协程:

@ActivityScope
class Foo @Inject constructor(
    private val bar: Bar,
    private val activityScope: LifecycleCoroutineScope
) {
    init {
        activityScope.launch {
            bar.myFlow?.collect {
                // 处理结果
            }
        }
    }
}

3. 确保组件关联正确

确认你的DaggerAppCompatActivity对应的Dagger组件(如ActivityComponent)已包含ActivityModule,且组件的作用域为@ActivityScope。这样Dagger会自动将当前Activity实例与提供的lifecycleScope关联起来。

关键说明

  • 无论运行时是MyActivity还是其他继承自DaggerAppCompatActivity的Activity,只要遵循相同的Dagger配置,都会自动注入对应Activity的lifecycleScope。
  • 所有通过该scope启动的协程,会在Activity执行onDestroy()时自动被取消,完全无需手动管理协程的生命周期。

内容的提问来源于stack exchange,提问作者Chad Schultz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:40:23