Qué orden de diseños anidados es más eficiente en Android
Creo que nunca he anidado más de tres niveles de Layouts ( RelativeLayout
, LinearLayout
, FrameLayout
) en Android. No estoy pensando en los elementos de lista que también utilizan un diseño personalizado para ListView
pero sólo diseños normales para una actividad.
Al punto, sin embargo, estaba charlando con otro desarrollador acerca de las disposiciones de anidación para un determinado diseño que estábamos discutiendo y parecía pensar que incluso unos pocos diseños anidados realmente ralentizó el rendimiento. Me imaginé que hay algo de verdad, pero no puede ser mucho.
- Cómo maximizar la eficiencia en este complejo escenario de transferencia de datos
- Recuperar mediante programación los datos de uso de la red de etiquetas en Android
- ¿Cuál es la tasa de bits de lectura NFC efectiva usando comandos de APDU?
- El proveedor de contactos de Android sólo obtiene contactos telefónicos con todos los correos electrónicos
- Haga que la animación de Android sea más suave cuando se muestre el teclado durante la animación
¿Alguien tiene un enfoque más experto en esto? ¿Alguna entrada? ¿Opinión?
Gracias.
ACTUALIZACIÓN para aquellos que se encuentran en Google: La primera respuesta a continuación es un gran recurso. Parece un montón y la gente parece saltarse las respuestas como que, pero por favor, echa un vistazo. Muy valioso.
- Formato de audio apropiado para efectos de sonido en teléfonos Android con respecto a la eficiencia
- ¿Hay alguna sobrecarga significativa en el uso de FragmentActivity sobre la actividad normal en Android?
- ¿Cómo implementar correctamente el feed (similar a Facebook / Instagram) en Android?
- El visualizador de jerarquía de Android no muestra los tiempos para la representación
- Android: Ampliación del libro de contactos del usuario. Rendimiento ContentProvider vs Sqlite vs Lista en la memoria
- Es SharedPreferences tiempo de acceso?
- ¿Hay alguna manera de hacer que una vista web que ejecuta android 4.0 se realice a un nivel aceptable?
- En una aplicación para Android, ¿cuándo se cargan los recursos en la memoria?
Supongo que no hay una bala de plata para esto, pero te daré algunos consejos:
1) Trate de usar las herramientas proporcionadas con el androide sdk.
layoutopt
a analizar mis diseños con hierarchyviewer
y layoutopt
tratando de reducir la cantidad de View
utilizada y la altura del árbol.
2) Lea los artículos de Romain Guy acerca de <include>
, <merge>
y <ViewStub>
Estas etiquetas no se usan a menudo, pero proporcionan una gran velocidad "hacks".
- http://www.curious-creature.org/2009/03/01/android-layout-tricks-3-optimize-part-1/
- http://www.curious-creature.org/2009/03/16/android-layout-tricks-4-optimize-part-2/
3) Use dmtracedump
y mida cuánto tiempo tarda en inflar una vista.
Puede comprobar cuánto tiempo tarda en inflar una vista. Obtener un inflado y medir cuánto tiempo se tarda en inflar cada una de sus opciones.
No he hecho ninguna prueba adecuada para apoyar esto, todavía, creo que androide fue el diseño para utilizar layouts de anidación con el fin de proporcionar UI adecuada para el usuario, su prácticamente la única manera de apoyar múltiples pantallas por lo que no me preocuparía sobre lo que Es el más eficiente, sólo 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 anidamiento de diseño.
La diferencia será mucho más importante cuando se utiliza dicho diseño para cada elemento de un ListView por ejemplo. Esperemos que este sencillo ejemplo le mostró que conocer su diseño es la mejor manera de aprender a optimizar su interfaz de usuario.
No se puede dar una respuesta completa, pero Romain Guy ha declarado específicamente que RelativeLayouts anidados tienen un tiempo exponencial para la medición.
Ver vídeo aquí a las 38:08 marca
En realidad todos ellos se basan en la misma clase .. pero sería mejor usar de acuerdo a mí como sigue:
<RelativeLayout> <LinearLayout> <at> here we just create nested more as we wont></at> </LinearLayout> </RelativeLayout>
- Error java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment en Google Map V2
- Crash: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R $ layout