此方法下面是否有可能导致内存泄漏。
android:onClick="@{(v) -> viewModel.showList(v)}
我的理解是,将视图引用传递给视图模型,然后视图模型使用引用并将其内容设置为视图。在碎片破坏上,关联的viewBinder也被破坏,整个屏幕从内存中释放出来。一旦片段被销毁,视图模型中是否仍然存在传递的视图引用?我不这么认为。
您是否建议使用此符号?如果这可能导致内存泄漏,您能否分享您的经验?
在给定的情况下可能是内存泄漏:
假设您单击视图,并且此方法viewModel.showList(v)
与传递给它的视图引用一起被调用。
现在假设您在globalViewRef
中具有全局变量ViewModel
,该变量存储对此视图的引用,例如:
class MyViewModel: ViewModel(){
lateinit var globalViewRef: View
fun showList(v: View){
globalViewRef = v // Storing view reference globally for future methods/purpose etc.
}
}
并且您的ViewModel
在具有[[activity上下文的片段之间共享,在这种情况下,如果发生配置更改,由于上下文的更改,您的viewModel
泄漏全局视图对象。
view/context
全局存储在ViewModel
类中[[(仅在必要时在方法内本地使用)。如果您几乎不需要全局存储某些内容,则重写onCleared()
并清理那里的引用,因为它是销毁状态ViewModel
跨活动上下文共享)
如果您同时涵盖了这两个方面,那么我可以发现您的情况没有内存泄漏。