使用Dagger 2示波器避免活动泄漏

时间:2018-08-16 03:41:52

标签: android android-activity dependency-injection dagger-2

如果我有这样的导航器:

class Navigator(activity: AppCompatActivity) {
   fun somemethods() {
       activity.supportFragmentTransaction.beginTransaction()...
   }
}

然后我通过DI(匕首2)将活动提供给导航器,其作用域为:

@Module
class NavigatorModule {

    @ActivityScope
    @Provides
    fun getNavigator(activity: SomeActivity) {
        return Navigator(activity)
    }

}

然后参加我的活动:

class SomeActivity : AppCompatActivity().... {
    @Inject
    lateinit var navigator: Navigator

    ....
}

这样可以避免泄漏活动吗?我假设重新创建活动时,将与活动一起收集垃圾回收对象。我是对还是错?

1 个答案:

答案 0 :(得分:0)

是的,您显示的设置应该可以。您的ActivityComponent中的任何内容都可以安全地引用该活动,并且一旦该活动被销毁,所有这些活动都会被垃圾收集。

您唯一需要注意的是,您没有引用寿命较长的对象中的任何一个,例如订阅以侦听Singleton对象上的更改。


我建议您将LeakCanary添加到您的项目中,这样每当您忘记注销某些侦听器时都会弹出通知。