Jetpack Compose y mejores prácticas que siempre debe recordar: parte 2 | de Kaaveh Mohamedi | diciembre 2022
La optimización del rendimiento no es una solución única para todos.
Hay tantas variables que pueden afectar el rendimiento. Es mejor escribir puntos de referencia para la aplicación y encontrar y corregir cuellos de botella en el rendimiento. Esta es una regla general, no solo específica de Jetpack Compose. Escriba un punto de referencia para las pantallas activas en su aplicación. Es como escribir una prueba de IU: benchmarkRule.measureRepeated(packageName = PACKAGE_NAME,metrics = list0f(FrameTimingMetric()),compilationMode = compileMode,iterations = ITERATIONS,setupBlock = {…}) {val lazyColumn = device.findObject (By. res(«list»))repeat(3) {lazyColumn.drag(Point(0, lazyColumn.visibleCenter.y / 3))}} Como suele escuchar, el compilador de composición no se recompone en algunos escenarios, cuando está seguro algunas funciones componibles. Para lograr esto, el compilador de Compose marca todos los parámetros de las funciones componibles como Stable o Unstable . Entonces hay dos condiciones:
1. Inestable
Si al menos un parámetro de función componible está marcado como inestable, esa función nunca se puede omitir y recomponer cada vez.
2. Estable
Si todos los parámetros están marcados como estables, el compilador de composición busca cambios en el valor del parámetro. Si se cambia un parámetro, se produce el reensamblaje; de lo contrario, omita el reensamblaje. Entonces, ¿qué tipos se consideran estables? Según documentos:
- Todos los objetos inmutables como todos primitivo tipos y instrumentos de cuerda. También clase de datos con Todo el mundo propiedad val (tipos que nunca cambian después de la construcción)
- Todos los objetos mutables que compila Compose son notificados de alguna manera cuando se cambia el valor. Como los objetos MutableState devueltos por mutableStateOf()
Hay una situación interesante. Las clases de colección como List, Set y Map siempre se determinan de manera inestable. ¿Pero por qué? Veamos un ejemplo: val contactList = mutableListOf(Contact(…)…)@Composablefun ContactList(contactList: List
Mi trabajo es evitar que los desarrolladores tengan que luchar con la estabilidad de los parámetros.
Creo que en las próximas versiones del compilador necesitará saber menos sobre la estabilidad de los parámetros. Pero si desea obtener más información sobre la estabilidad, consulte este video de Leland: