【发布时间】:2020-11-08 05:12:57
【问题描述】:
我知道将视图传递给 ViewModel 类会导致内存泄漏,但如果我将视图(例如 ProgressBar)传递给 AndroidViewModel 类,如下所示,它也会导致内存泄漏吗?
class MainActivityViewModel (application: Application, progressBar: ProgressBar): AndroidViewModel(application) {
var name: LiveData<String> = Transformations.map(docRef) {
progressBar.visibility = View.GONE
it.getString("string")
}
}
我将使用数据绑定从我的布局文件中调用name,例如android:text="@{viewModel.name]"。
上面的代码会不会造成内存泄漏?
【问题讨论】:
-
不要将任何与上下文相关的内容传递给 viewmodel ,包括任何类型的视图。
-
将引用直接传递给视图模型是一个坏主意,原因有几个。 1) 如果在视图模型中保留硬引用,则潜在的内存泄漏 2) 关注的分离 - 如果视图模型被传递给视图,那么它可以访问整个
View对象 - 它应该被解耦 3) mvvm 设计模式,视图模型应该只对用户事件做出反应,即 onLoad(),`onSignIn(args ...)` 或提供 UI 数据。当然这是你的选择——但这是我对你的问题的直接挑战。
标签: android kotlin data-binding android-databinding