Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

348
Vistas
Jetpack Compose y Room DB: ¿sobrecarga de rendimiento de la entrada de usuario de guardado automático?

Estoy escribiendo una aplicación con Jetpack Compose que le permite al usuario ingresar texto en algunos TextFields y marcar algunos botones de opción.

Estos datos luego se almacenan en una base de datos de habitaciones.

Actualmente, tengo un botón "guardar" en la parte inferior de la pantalla, con un "¿Salir sin guardar?" surgir.

Sin embargo, me gustaría deshacerme del botón Guardar por completo y hacer que guarde automáticamente los datos a medida que se escriben.

¿Las consultas repetidas de la base de datos al escribir causarían algún problema de rendimiento? ¿Y existen mejores prácticas establecidas para este tipo de cosas?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Con kotlin flow puedes usar debounce , que está diseñado específicamente para estos casos. De esa manera, siempre que el usuario ingrese texto, no se llamará a saveToDatabase , y cuando no ingrese un carácter durante algún tiempo (en mi ejemplo es un segundo), se emitirá el flujo.

Además, durante Compose Navigation, el modelo de vista puede destruirse (y la corrutina se cancelará) si la pantalla está cerrada, en ese caso también guardo los datos dentro de onCleared para asegurarme de que no falte nada.

 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) significa que la API puede cambiarse en el futuro. Si no desea utilizarlo ahora, consulte el reemplazo aquí .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda