gpt4 book ai didi

android - 如果 LiveData 没有属性支持,livedata-ktx 与 ViewModel 的使用是否会导致内存泄漏?

转载 作者:行者123 更新时间:2023-12-02 13:34:46 28 4
gpt4 key购买 nike

使用 lifecycle-viewmodel-ktxlifecycle-livedata-ktx并给出以下示例:
ViewModel 实现:

class AutocompletionViewModel: ViewModel() {

fun getAutocompletion(inputString: CharSequence?) = liveData {
delay(10)
emit("$inputString DUMMY AUTOCOMPLETION")
}
}
fragment 部分 :
val viewModel by viewModels<AutocompletionViewModel>()
/* Acquiring EditText*/
editText.addTextChangedListener(object: TextWatcher{

override fun afterTextChanged(editable: Editable?) {
viewModel.getAutocompletion(editable).observe(viewLifecycleOwner, Observer { editable?.append(it) })
}

/* Other TextWatcher method implementations*/
})
如果用户在 EditText 中键入文本,这段代码会导致内存泄漏吗?
我假设每个文本都会改变一个新的 LiveData带有 stong 引用的对象 Observer被创建(并且在 fragment 被销毁之前将一直存在)。尽管如此,一个类似的例子 官方文档显示: https://developer.android.com/topic/libraries/architecture/coroutines#livedata

最佳答案

是的,存在内存泄漏:
我附加了 Android Studios 内存分析器并执行了 AutocompletionViewModel.getAutocompletion一万次。无论垃圾收集如何,ObserverLiveData对象仍然在内存中:
enter image description here

本案结论 :LiveData对象应该由属性和 Observers 支持应该只附加一次

关于android - 如果 LiveData 没有属性支持,livedata-ktx 与 ViewModel 的使用是否会导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59265617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com