Optimizar el rendimiento de una aplicación móvil no es opcional, es una necesidad que marca la diferencia entre una experiencia fluida y una que frustra al usuario. Conocer las técnicas correctas para mejorar la UI, manejar web services heredados y elegir la forma adecuada de pasar datos entre pantallas puede ser determinante incluso en una entrevista técnica.
¿Cómo evitar el overdrawing en la interfaz de usuario?
Uno de los problemas más comunes al construir interfaces complejas es el overdrawing [0:44]. Esto ocurre cuando una vista se renderiza sobre otra, y luego otra más encima, generando un sobrerrenderizado innecesario que consume recursos del dispositivo.
Las jerarquías anidadas en XML son una causa directa de este problema [1:05]. Cuantos más niveles de contenedores tengamos apilados, más trabajo tiene que hacer el sistema para dibujar la pantalla. Vale la pena mencionar que en Jetpack Compose esto no sucede, ya que utiliza un paradigma diferente para renderizar la UI [1:16].
Para identificar el overdrawing, se puede usar una herramienta de depuración que colorea las zonas según la cantidad de veces que se sobrerrenderiza [1:40]:
- Rojo: zona con mayor overdrawing, por ejemplo un background con una imagen encima.
- Verde: zona con menor sobrerrenderizado, aunque puede existir texto sobre un fondo blanco.
¿Por qué el ConstraintLayout mejora el rendimiento?
Una de las formas más efectivas de reducir jerarquías anidadas es utilizar ConstraintLayout [2:22]. Este componente permite definir reglas de posición entre vistas sin necesidad de anidar contenedores.
- Se establecen relaciones directas entre una vista y otra.
- No se requieren múltiples layouts envolventes para lograr una estructura visual.
- Se pueden definir reglas condicionales: si una vista desaparece, otra puede ocupar su lugar.
Por ejemplo, en lugar de colocar una imagen y un cuadro de texto dentro de un contenedor con background, se puede posicionar el título justo debajo de la imagen usando constraints, evitando que se pinte un fondo innecesario debajo de la imagen [2:55].
¿Qué es el patrón BFF y cuándo utilizarlo?
Cuando se trabaja con web services heredados que tienen mal rendimiento, y no es posible modificarlos porque el equipo original ya no está disponible, entra en juego el patrón BFF (Backend For Frontend) [3:18].
Sin un BFF, el dispositivo móvil recibe datos crudos de múltiples servidores. Debe transformar toda esa información usando su propio procesador, lo cual es lento y deja al usuario sin feedback visual mientras ocurre [3:40].
¿Cómo funciona la orquestación con BFF?
Con un BFF, se crea una capa intermedia en el backend que se encarga de:
- Conectarse a todos los servidores necesarios.
- Transformar y consolidar la información con el procesador del servidor, que es mucho más rápido que el de un celular.
- Entregar al dispositivo móvil datos listos para mostrar [4:10].
De esta manera, el dispositivo simplemente llama al BFF y muestra la data sin necesidad de procesamiento pesado. Se elimina el paso donde el usuario espera sin ver nada en pantalla.
¿Cuál es la diferencia entre parcelable y serializable en Android?
Este es uno de los temas más preguntados en entrevistas técnicas [4:40]. Ambos mecanismos cumplen el mismo objetivo: pasar datos de una pantalla a otra durante la navegación. Sin embargo, su rendimiento es muy diferente.
Serializable utiliza un método llamado reflection [5:05], que funciona por fuerza bruta. El sistema busca de cualquier forma cómo convertir el objeto en bits y cómo leerlo de vuelta. Su ventaja es la simplicidad: solo se necesita implementar la interfaz con dos puntos y la palabra Serializable en Kotlin.
kotlin
data class Student(val id: Int, val name: String) : Serializable
Parcelable, en cambio, ofrece un rendimiento superior porque el desarrollador le indica al compilador exactamente cómo transformar los datos [5:30]. Esto requiere más código, pero el resultado es significativamente más rápido.
Las pruebas en dispositivos de diferentes gamas lo confirman [5:55]:
- En un LG G3, serializable tardó casi el doble que parcelable.
- En dispositivos como el Samsung S5, Moto E2 y S10, serializable siempre registró mayor tiempo de ejecución.
Aunque serializable sea más fácil de implementar, la recomendación es clara: siempre utiliza parcelable para obtener un rendimiento hasta dos veces mejor en algunos dispositivos.
Estos conceptos no solo mejoran la calidad de las aplicaciones, sino que son clave en procesos de selección técnica. ¿Ya aplicas alguno de estos tips en tus proyectos? Comparte tu experiencia en los comentarios.