Optimización de la jerarquía de diseño

Es un concepto erróneo muy común, pretender que el uso de las estructuras de diseño básico conducen a los diseños más eficientes. Sin embargo, cada widget y diseño que agregue a su aplicación requiere ser iniciado, diseño y dibujo. Por ejemplo, el uso de instancias anidadas de LinearLayout puede conducir a una jerarquía de vista demasiado profunda. Además, anidar varias instancias de LinearLayout que utilizan el parámetro layout_weight puede ser especialmente costoso ya que cada hijo debe medirse dos veces. Esto es particularmente importante cuando el diseño se agrega repetidamente, como cuando se utiliza ListView o GridView.

Inspección del diseño

Dentro de las herramientas del Android SDK se incluye un Visor de Jerarquía (Hierarchy View) que le permite analizar el diseño mientras se ejecuta la aplicación. El uso de esta herramienta lo ayuda a descubrir cuellos de botella en el rendimiento de diseño.

Hierarchy View funciona al permitirle seleccionar procesos en ejecución en un dispositivo o emulador conectado, luego visualizar el árbol de diseño. Los semáforos en cada bloque representan el rendimiento de medición, diseño y dibujo, lo que ayuda a identificar posibles problemas.

Por ejemplo, la figura 1 muestra un diseño que se utiliza como un elemento en un ListView. Este diseño muestra una pequeña imagen de mapa de bits a la izquierda y dos elementos de texto apilados a la derecha. Es especialmente importante que los diseño que se agregaran varias veces, como este, se optimicen a medida que se multipliquen los beneficios del rendimiento.

Figura 1. Diseño conceptual para un elemento de ListView

Hierarchy Viewer muestra una lista de dispositivos disponibles y sus componentes en ejecución. Elija un componente desde la pestaña de Windows y haga clic en vista de jerarquía para ver la jerarquía de diseño de componentes seleccionados. Por ejemplo, la figura 2 muestra el diseño del elemento de la lista ilustrada en la figura 1.

Figura 2: Jerarquía del diseño de la figura 1, utilizando LinearLayout anidados.

Revisar el diseño

Debido a que el diseño anterior se hace lento debido a los LinearLayout anidados, el rendimiento se puede mejorar aplanando el diseño: haga que el diseño sea poco profundo y amplio. Un RelativeLayout como nodo raíz permite tales diseños. Entonces, cuando este diseño se convierte para utilizar RelativeLayout, puede ver que el diseño se convierte en una jerarquía de dos niveles. La inspección del nuevo diseño se ve así:

Figura 3: Jerarquía de diseño para la figura 1, utilizando Relative Layout.

Los beneficios, por pequeños que puedan parecer, se multiplican varias veces porque este diseño se usa para cada elemento de la lista.

La mayor parte de la diferencia se debe al uso de layout_weigth en el diseño LinearLayout, que puede hacer más lenta la velocidad de medición. Este es sólo un ejemplo de como cada diseño tiene usos apropiados y debe considerar cuidadosamente si es necesario usar el peso del diseño.

En algunos diseños complejos, el sistema puede desperdiciar esfuerzos midiendo el mismo elemento de la interface de usuario más de una vez. Puede ver más información en Performance and View Hierarchies.

Usar Lint

Siempre es una buena herramienta utilizar la herramienta Lint en los archivos de diseño para buscar posibles optimizaciones en la jerarquía de los View. Lint ha reemplazado a la herramienta Layoutopt y tiene una funcionalidad mucho mayor. Algunos ejemplos de reglas de Lint son:

  • Utilizar elementos compuestos: Un LinearLayout que contiene un ImageView y un TextView puede manejarse más eficientemente como un elemento compuesto.
  • Fusionar el marco raíz: si un FrameLayout es la raíz de un diseño y no proporciona un fondo o relleno, se puede reemplazar con un elemento de fusión que es ligeramente más eficiente.
  • Elementos inútiles: un diseño que no tiene hijos o que no tiene ningún fondo a menudo se puede eliminar (ya que es invisible) para una jerarquía de diseño más plana y eficiente.
  • Elemento padre inútil: un diseño con hijos que no tiene hermanos, no es ScrollView o un diseño de raíz, y no tiene un fondo, se puede eliminar y mover los hijos directamente al elemento primario para obtener una jerarquía de diseño más plana y más eficiente.
  • Diseños profundos: los diseños con demasiados anidamiento son malos para el rendimiento. Considere usar diseños más planos como RelativeLayout o GridLayout para mejorar el rendimiento. La profundidad máxima predeterminada es 10.

Otro gran beneficio de Lint es que esta integrado a Android Studio. Lint se ejecuta automáticamente cada vez que se compila el programa. Con Android Studio, también puede ejecutar inspecciones de Lint para una variante de compilación específica o para todas las variantes de compilación.

También puede administrar perfiles de inspección y configurar inspecciones dentro de Android Studio con la opción File>Settings> Project Settings.

Lint tiene la capacidad de corregir automáticamente algunos problemas, proporcionar sugerencia para otros y pasar directamente determinado código para su revisión.


Este artículo se encuentra basado en Optimizing Layout Hierarchies

Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Share on Google+
Google+
Facebook