2011-03-21 17 views
14

No creo que haya anidado más de tres niveles en Layouts (RelativeLayout, LinearLayout, FrameLayout) en Android. No estoy pensando en los elementos de la lista que también usan un diseño personalizado para ListView, pero solo diseños normales para una actividad.¿Qué orden de diseños anidados es más eficiente en Android

Hasta el punto, estaba hablando con otro desarrollador sobre diseños de anidación para un cierto diseño que estábamos discutiendo y parecía pensar que incluso algunos diseños anidados realmente ralentizaron el rendimiento. Pensé que hay algo de verdad, pero no puede ser tanto.

¿Alguien tiene un enfoque más experto para esto? ¿Alguna entrada? ¿Opinión?

Gracias.

ACTUALIZACIÓN para aquellos que encontraron en Google: La primera respuesta a continuación es un gran recurso. Parece mucho y la gente parece omitir respuestas como esa, pero por favor compruébalo. Muy valioso.

+0

yo habría pensado que más personas se han referenciado esta cuestión y la respuesta maravillosa a continuación con el fin de producir aplicaciones más eficientes. Tal vez el anuncio de 3.1, el ADK, etc. han hecho que esta sea la menor de las preocupaciones de las personas mientras intentan ponerse al día con todo lo que ocurre recientemente ... – trgraglia

Respuesta

31

supongo que no hay bala de plata para esto, pero voy a dar algunos consejos:

1) Intente utilizar las herramientas proporcionadas con el sdk de Android.

tiendo a analizar mis diseños con hierarchyviewer y layoutopt tratar de reducir la cantidad de View utilizado y la altura del árbol.

2) Leer mensajes de Romain Guy sobre <include>, <merge> y <ViewStub> Estas etiquetas no se utilizan a menudo, pero que proporcionan grandes "hacks" velocidad.

3) Uso dmtracedump y medir el tiempo que se tarda en inflar una vista.

Puede verificar cuánto tiempo se tarda en inflar una vista. Obtenga un inflador y mida cuánto tiempo lleva inflar cada una de sus opciones.

+1

puede agregar a la lista otras sugerencias de Guy: a menudo anidados 'LinearLayouts' se puede convertir en un' RelativeLayout'. (No puedo proporcionar la referencia en este momento) – bigstones

+0

La herramienta 'layoutopt' ha sido reemplazada por' lint'. Ver http://stackoverflow.com/a/8572055/133153. – joelpet

1

No he hecho ninguna prueba adecuada para respaldar esto, aún así, creo que Android estaba diseñado para usar diseños de anidamiento para proporcionar una interfaz de usuario adecuada para el usuario, es prácticamente la única manera de admitir pantallas múltiples, así que no realmente me preocupa cuál es el más eficiente, solo que se ve como debería.

Cualquier otro tipo de mala práctica de programación probablemente tendría un mayor efecto en la eficiencia que el diseño de anidación.

+0

+1 (Cuando obtengo más votos) Muy cierto, pero al mismo tiempo, no debería tener que cambiar mucho los diseños para admitir múltiples tamaños de pantalla siempre que los gráficos estén diseñados para los diferentes tamaños de pantalla. – trgraglia

+0

Lo que quise decir es que con un acomodo de disposición adecuado, casi siempre puede tener un solo diseño para todos los tamaños de pantalla y permite que se adapte automáticamente – blindstuff

-3

realidad todos ellos se basan en la misma clase .. pero sería mejor usar de acuerdo a mi como sigue:

<RelativeLayout> 
    <LinearLayout> 
     <at> here we just create nested more as we wont></at> 
    </LinearLayout> 
</RelativeLayout> 
+3

No estoy seguro de seguir completamente esta respuesta ... – trgraglia

0

La diferencia será mucho más importante cuando utilice un diseño para cada elemento en un ListView, por ejemplo. Con suerte, this simple example le mostró que conocer sus diseños es la mejor manera de aprender a optimizar su UI.

0

No puedo darle una respuesta completa, pero Romain Guy ha declarado específicamente que los RelativeLayouts anidados tienen un tiempo exponencial para la medición.

Ver video here at 38:08 mark

Cuestiones relacionadas