gpt4 book ai didi

android - Jetpack Compose 和 Room DB : Performance overhead of auto-saving user input?

转载 作者:行者123 更新时间:2023-12-04 23:53:57 25 4
gpt4 key购买 nike

我正在使用 Jetpack Compose 编写一个应用程序,它允许用户在某些 TextFields 中输入文本并选中一些单选按钮。

此数据随后存储在 Room 数据库中。

目前,我在屏幕底部有一个“保存”按钮,上面有一个“不保存就离开吗?”弹出窗口。

但是,我想完全去掉保存按钮,让它在输入时自动保存数据。

键入的重复数据库查询会导致任何性能问题吗?对于这类事情是否有任何既定的最佳实践?

最佳答案

对于 kotlin flow,您可以使用 debounce ,专为此类情况而设计。这样,只要用户输入文本,saveToDatabase 就不会被调用,并且当他一段时间没有输入字符时(在我的示例中是一秒钟)- 将发出流.

此外,在 Compose Navigation 期间,如果屏幕关闭, View 模型可能会被销毁(协程将被取消),在这种情况下,我还将数据保存在 onCleared 中,以确保没有任何内容失踪。

class ScreenViewModel: ViewModel() {
private val _text = MutableStateFlow("")
val text: StateFlow<String> = _text

init {
viewModelScope.launch {
@OptIn(FlowPreview::class)
_text.debounce(1000)
.collect(::saveToDatabase)
}
}

fun updateText(text: String) {
_text.value = text
}

override fun onCleared() {
super.onCleared()
saveToDatabase(_text.value)
}

private fun saveToDatabase(text: String) {

}
}

@Composable
fun ScreenView(
viewModel: ScreenViewModel = viewModel()
) {
val text by viewModel.text.collectAsState()
TextField(value = text, onValueChange = viewModel::updateText)
}

@OptIn(FlowPreview::class) 表示以后可能会更改API。如果您现在不想使用它,请参阅替换 here .

关于android - Jetpack Compose 和 Room DB : Performance overhead of auto-saving user input?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69689839/

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