数据绑定内存泄漏

问题描述 投票:0回答:1

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

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

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

您是否建议使用此符号?如果这可能导致内存泄漏,您能否分享您的经验?

data-binding viewmodel android-databinding android-architecture-components android-viewmodel
1个回答
0
投票

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

假设您单击视图,并且此方法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泄漏全局视图对象


所以,要记住的事情:

  1. 从不将view/context全局存储在ViewModel类中[[(仅在必要时在方法内本地使用)。
  2. 如果您几乎不需要全局存储某些内容,则重写onCleared()并清理那里的引用,因为它是销毁状态

  3. ([ViewModel跨活动上下文共享)

如果您同时涵盖了这两个方面,那么我可以发现您的情况没有内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.