代码之家  ›  专栏  ›  技术社区  ›  Archie G. Quiñones

用匕首2瞄准镜避免活动泄漏

  •  0
  • Archie G. Quiñones  · 技术社区  · 6 年前

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

    我通过DI(Dagger 2)向导航器提供一个范围:

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

    然后在我的活动中:

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   David Medenjak    6 年前

    是的,你展示的设置应该很好。ActivityComponent中的任何内容都可以安全地引用该活动,一旦该活动被销毁,将在某个时间点对其进行垃圾收集。

    唯一需要注意的是,您不引用那些长寿命对象中的任何一个,例如订阅侦听单例对象上的更改。


    我建议你加上 LeakCanary