Sin tonterías, una breve introducción al análisis de rendimiento de RelativeLayout, LinearLayout y FrameLayout
1.RelativeLayout hará que la Vista secundaria llame a Measure dos veces. Cuando LinearLayout tiene peso, también llamará a Medida dos veces para la Vista secundaria.
2.Si es la altura del niño. La vista de RelativeLayout es diferente de la de RelativeLayout. Cuando la subvista es compleja, este problema será más grave. Si es posible, intente utilizar relleno en lugar de margen.
3. Utilice LinearLayout y FrameLayout en lugar de RelativeLayout sin afectar la profundidad jerárquica.
Finalmente, pensemos en el tema contradictorio al principio del artículo. ¿Por qué Google crea un nuevo RelativeLayout para desarrolladores de forma predeterminada, pero en DecorView es un FrameLayout pero solo uno de sus elementos secundarios? pertenece al LinearLayout. Debido a que la profundidad de la jerarquía de DecorView es conocida y fija, hay una barra de título arriba y una barra de contenido debajo. El uso de RelativeLayout no reducirá la profundidad jerárquica, por lo que es más eficiente usar LinearLayout en el nodo raíz en este momento. La razón por la que se crea un nuevo RelativeLayout de forma predeterminada para los desarrolladores es esperar que los desarrolladores puedan usar la menor cantidad posible de niveles de Vista para expresar el diseño y lograr un rendimiento óptimo, porque el anidamiento complejo de Vistas tendrá un mayor impacto en el rendimiento.
4. Si puede usar dos LinearLayouts, intente usar un RelativeLayout. En términos de tiempo, RelativeLayout requiere menos tiempo. Además, el uso cuidadoso de layout_weight en LinearLayout también duplicará la operación que requiere mucho tiempo. Debido al uso del peso_diseño de LinearLayout, la mayoría de las veces es diferente, lo que ralentizará la medición. Este es solo un ejemplo de cómo usar el diseño de manera razonable. Cuando sea necesario, debe considerar cuidadosamente si usar el peso del diseño. En resumen, reducir la estructura jerárquica es la mejor manera, dejar que onMeasure realice una carga diferida y usar viewStub, include y otras técnicas.