下面的类有一个非常独特的生命周期,这需要我暂时清空lateinit
属性
class SalesController : BaseController, SalesView {
@Inject lateinit var viewBinder: SalesController.ViewBinder
@Inject lateinit var renderer: SalesRenderer
@Inject lateinit var presenter: SalesPresenter
lateinit private var component: SalesScreenComponent
override var state = SalesScreen.State.INITIAL //only property that I want to survive config changes
fun onCreateView(): View { /** lateinit variables are set here */ }
fun onDestroyView() {
//lateinit variables need to be dereferences here, or we have a memory leak
renderer = null!! //here's the problem: throws exception bc it's a non-nullable property
} }
这是框架使用它的方式。
controller.onCreateView() //same instance of controller
controller.onDestroyView() //same instance of controller
controller.onCreateView() //same instance of controller
controller.onDestroyView() //same instance of controller
我的lateinit
属性是由 dagger 注入的,我需要将它们设置为null
in onDestroyView
- 或者有内存泄漏。然而,据我所知(没有反思),这在 kotlin 中是不可能的。我可以使这些属性为空,但这会破坏 Kotlin 的空安全性的目的。
我不太确定如何解决这个问题。理想情况下,可能有某种类型的注释处理器会生成 java 代码以自动清除特定变量onDestroyView
?