0

我研究了这个示例repo以了解如何在 Android 应用程序中实现 Kodein。但是我对示例中活动案例中的上下文问题感到困惑。

这里的代码:

  abstract class BaseActivity<B : ViewDataBinding, VM : ViewModel>: AppCompatActivity(), KodeinAware {

  protected lateinit var binding: B
  lateinit var viewModel: VM
  private val _parentKodein by closestKodein()

  override val kodein: Kodein by retainedKodein {
    extend(_parentKodein, copy = Copy.All)
    bind<Activity>() with singleton { this@BaseActivity }
    bind<Context>("ActivityContext") with singleton { this@BaseActivity }
    import(activityModule)
  }
}

在这里,我们看到我们将活动的上下文添加到单例中。

但我也看到我们Kodein是按retainedKodein功能获得的。所以这个 Kodein 模块对旋转时的活动破坏免疫。但我不了解活动的上下文,因为单例持有上下文。

所以我问。Kodein 是否重新附加了活动的上下文?你能向我描述一下重新连接机制吗?因为这对我来说现在还不清楚。谢谢你们!:))

4

1 回答 1

0

答案是不可能!Kodein 无法将活动上下文重新附加到他的实例。我使用了 leackcanary util 并在示例repo中发现了活动泄漏,还创建了 isuue

有 leackcanary 结果:在此处输入图像描述

于 2019-12-15T13:28:47.157 回答