数据绑定内存泄漏



在此方法下面是否有可能导致内存泄漏。

android:onClick="@{(v) -> viewModel.showList(v)}

我的理解是,视图引用传递给视图模型,然后视图模型使用引用并将其内容设置为视图。在片段销毁时,关联的 viewBinder 也被销毁,整个屏幕从内存中释放出来。一旦片段被销毁,视图模型中是否会保留传递的视图引用?我不这么认为。

你建议使用这种符号吗?如果这是内存泄漏的可能性,您能分享您的经验吗?

在给定的情况下,这可能是内存泄漏:

假设您单击视图,并且viewModel.showList(v)调用此方法以及传递给它的视图引用。

现在假设您在ViewModel中存储对此视图的引用的全局变量globalViewRef,例如:

class MyViewModel: ViewModel(){
lateinit var globalViewRef: View
fun showList(v: View){
globalViewRef = v // Storing view reference globally for future methods/purpose etc.
}
}

并且您的ViewModel在具有活动上下文的片段之间共享,在这种情况下,如果发生配置更改,您的viewModel由于上下文更改而泄漏全局视图对象


因此,要记住的事项:

  1. 切勿ViewModel类中全局存储view/context(仅在必要时才在方法中本地使用它(。

  2. 如果有一些东西你几乎不需要全局存储,那么覆盖onCleared()并清理那里的引用,因为它是ViewModel要销毁状态时的最后一次调用(当ViewModel没有跨活动上下文共享时考虑这一点(。

如果您同时涵盖了这两件事,那么我找不到您的案例中的内存泄漏。

相关内容

  • 没有找到相关文章

最新更新