如果我有这样的导航器:
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
....
}
这样可以避免泄漏活动吗?我假设重新创建活动时,将与活动一起收集垃圾回收对象。我是对还是错?
答案 0 :(得分:0)
是的,您显示的设置应该可以。您的ActivityComponent中的任何内容都可以安全地引用该活动,并且一旦该活动被销毁,所有这些活动都会被垃圾收集。
您唯一需要注意的是,您没有引用寿命较长的对象中的任何一个,例如订阅以侦听Singleton对象上的更改。
我建议您将LeakCanary添加到您的项目中,这样每当您忘记注销某些侦听器时都会弹出通知。