Emisión controlada de tiempo con Kotlin Flows
Clase 7 de 33 • Curso de Android: Integración de APIs nativas
Contenido del curso
- 7

Emisión controlada de tiempo con Kotlin Flows
12:55 - 8

Simulación de ubicación GPS en emulador y dispositivo Android
05:48 - 9

Modelos de localización personalizados con Clean Architecture en Kotlin
08:36 - 10

Mapeo de datos de localización en Android con Kotlin
14:51 - 11

Inyección de dependencias para observar localización en Android
06:33 - 12

StateFlow para controlar localización en aplicaciones Android
08:47 - 13

State Flows para controlar localización y tiempo en Kotlin
10:00 - 14

Configuración y pruebas de Location Tracker en Android
09:37 quiz de Servicios de Localización
- 15

Integración de ubicación actual en mapas interactivos
06:46 - 16

Creación de polilíneas con datos reales en mapas de Android
04:07 - 17

Integración de intents y estados en pantalla mapa con Compose
08:05 - 18

Implementación del ViewModel para rastreo de localización en Android
14:29 quiz de Integración Maps con Localización
- 19

Gestión de permisos en tiempo de ejecución para aplicaciones Android
08:34 - 20

Creación de diálogos de permisos reutilizables en Android
06:55 - 21

Gestión de permisos de localización y notificaciones en Android
10:18 - 22

Implementación de solicitud de permisos con LaunchedEffect en Compose
09:53 quiz de Manejo de permisos
- 23

Implementación de PhotoHandler para gestión de cámara en Android
11:59 - 24

Conversión de Bitmaps a Byte Arrays con Extension Functions
05:58 - 25

Definición de Intents y estados de UI para cámara en Kotlin
08:41 - 26

Configuración de métodos del ViewModel para gestión de cámara
09:41 - 27

Integración de CameraX con Jetpack Compose en Android
14:23 - 28

Creación de pantalla de previsualización de fotos con Jetpack Compose
08:44 - 29

Integración de galería fotográfica en mapas con Jetpack Compose
11:56 quiz de Integración cámara
En Kotlin, manejar emisores de tiempo para proyectos de localización requiere conocer herramientas clave como Flows y Duration. Utilizando estas técnicas, puedes generar valores temporales precisos y constantes. Veamos cómo se implementan estas tecnologías de forma efectiva.
¿Qué son los flows y cómo funcionan en Kotlin?
Flows son herramientas de Kotlin diseñadas para realizar programación reactiva. Permiten emitir y coleccionar datos asíncronamente. Un flow builder facilita emitir valores cada cierto intervalo, por ejemplo cada 200 milisegundos.
Para utilizarlo de manera efectiva, se define:
- Una carpeta domain.
- Una clase llamada timer como objeto sencillo (singleton).
- Funciones específicas que encapsulan la lógica temporal.
¿Cómo crear un timer con Kotlin flows?
Debes definir una función timeAndEmits con la siguiente lógica en Kotlin:
val lastEmitTime = System.currentTimeMillis()
while(true) {
delay(200)
val currentTime = System.currentTimeMillis()
val lapseTime = currentTime - lastEmitTime
emit(lapseTime.milliseconds)
lastEmitTime = currentTime
}
Esto permite generar intervalos exactos, enviando cada 200 milisegundos.
¿Cómo colectar valores emitidos por un flow?
Es esencial activar y coleccionar los valores emitidos desde tu Flow. La activación (Cold Flow) ocurre al utilizar operadores como collect o launchIn:
// Con lifecycleScope.launch
timer.timeAndEmits().collect {
Log.d("Flow Timer", "timer interval: $it")
}
// Alternativa con launchIn y onEach
timer.timeAndEmits().onEach {
Log.d("Flow Timer", "timer interval: $it")
}.launchIn(lifecycleScope)
¿Qué operador utilizar para combinar flujos en Kotlin?
Utilizando operadores como zip, puedes combinar dos flujos diferentes para generar una emisión combinada y controlada:
timer.timeAndEmits()
.scan(Duration.ZERO) { accumulator, value -> accumulator + value }
.zip(timer.randomFlow()) { time, random -> Pair(time, random) }
.onEach {
Log.d("ZIP Flow", "Time: ${it.first}, Random: ${it.second}")
}.launchIn(lifecycleScope)
En este ejemplo:
- scan acumula y suma tiempos anteriores para un control más preciso.
- zip coordina cada emisión de los flujos, estableciendo dependencia de ambos para avanzar.
¿Cuál es la precisión al usar delay en flows?
Es importante considerar que delay no es completamente exacto debido al tiempo de ejecución en líneas de código Kotlin, produciendo pequeñas variaciones de tiempo como 203 o 204 milisegundos en lugar de 200 exactos.