¿Hay consejos de administración de memoria para cuidar al crear aplicaciones de Android?

Recientemente me hicieron algunas preguntas en una entrevista sobre Android. Busqué algunos de ellos, pero no pude encontrar los recursos adecuados y las respuestas. Así que quería compartirlo con ustedes aquí.

  1. ¿Cuál es el diseño preferido para usar en Android (para un mejor consumo de memoria o algo así)? No tuve respuesta para eso y el entrevistador me dijo que es el diseño relativo. Es esto cierto ? Cualquier explicación para eso?

  2. Dime algunas prácticas que haces para mejorar el consumo de memoria? He echado un vistazo aquí, pero parece que hay otras cosas. Porque el entrevistador mencionó algunas cosas relacionadas con variables estáticas son mejores.

  3. Si Android necesita memoria, ¿matará un servicio o actividad? Una cuestión de prioridad. Tampoco encontré a nadie discutiendo esto. El entrevistador dijo algo sobre el Servicio tiene alta prioridad (??) que la actividad por lo que la actividad es el componente que será asesinado. Es esto cierto ? Cualquier otro recurso o explicación?

Por favor comparta cualquier conocimiento o recursos que conozca acerca de estos temas.

Respondiendo uno por uno:

Nr. 1

Suena mal. Es incorrecto decir que RelativeLayout es siempre más rápido que cualquier otro diseño. Lo que hace un diseño "rápido" o "lento" es cuánto tiempo se tarda en calcular las posiciones y los tamaños de todos los niños. Así que cuando sólo está mostrando 15 filas de TextView , una debajo de la otra, un LinearLayout sin duda sería más rápido (y menos engorroso de usar).

En general, yo recomendaría usar el diseño que mejor se adapte a su situación.

Nr. 2

Preferir variables estáticas tiene la "ventaja" de que se inicializan (y por lo tanto en memoria) sólo una vez. Pero esto es más una decisión de diseño que un rendimiento.

Debe evitar grandes colecciones anidadas en la memoria (como List<List<HashMap<?,?>> ), pero esto realmente debería ser sentido común. La cosa con la creación del objeto es, que si usted crea muchos objetos y no guarda ninguna referencia a ellos, conseguirán la basura recogida. Esto agregará tiempo de ejecución a su aplicación.

Nr. 3

Esto es correcto y equivocado. Los servicios se pueden iniciar con diferentes prioridades. Sin embargo, antes de que cualquier aplicación de su aplicación (ya sea un servicio o una actividad) sea eliminada, las aplicaciones de fondo y sus recursos serán liberados.

Para los servicios, la documentación ofrece varias sugerencias:

El sistema Android intentará mantener el proceso de alojamiento de un servicio en todo el tiempo que el servicio se ha iniciado o tiene clientes vinculados a ella. Cuando la memoria es baja y necesita matar los procesos existentes, la prioridad de un proceso que aloje el servicio será la más alta de las siguientes posibilidades : [Lista completa]

En Actividades, se enumera lo siguiente :

Una actividad tiene esencialmente cuatro estados:

  • Si una actividad en el primer plano de la pantalla (en la parte superior de la pila), está activa o en ejecución.

  • Si una actividad ha perdido el foco pero sigue siendo visible (es decir, una nueva actividad no de tamaño completo o transparente se ha centrado en la parte superior de su actividad), se detiene. Una actividad en pausa está completamente viva (mantiene toda la información de estado y miembro y permanece conectada al administrador de ventanas), pero puede ser eliminada por el sistema en situaciones de memoria de muy baja intensidad.

  • Si una actividad es completamente oscurecida por otra actividad , se detiene. Todavía conserva toda la información de estado y miembro, sin embargo, ya no es visible para el usuario por lo que su ventana está oculta y que a menudo será asesinado por el sistema cuando la memoria se necesita en otro lugar.

  • Si una actividad se detiene o se detiene, el sistema puede dejar caer la actividad de la memoria ya sea pidiéndole que finalice o simplemente mate su proceso. Cuando se vuelve a mostrar al usuario, debe reiniciarse completamente y volver a su estado anterior.

Por lo tanto, para las actividades, depende del estado actual de la probabilidad de que sea asesinado.

Conclusión

Una cita sobre la optimización de "MA Jackson":

Seguimos dos reglas en materia de optimización:
Regla 1: No lo hagas.
Regla 2 (sólo para expertos): No lo haga todavía, es decir, no hasta que tenga una solución perfectamente clara y sin optimizar.

No utilizar una característica de la plataforma en particular porque es "demasiado lento" es a menudo una mala idea. Google y Oracle cuidan mucho de que sus bibliotecas estándar estén lo más optimizadas posible . Deje que los expertos se preocupan por cosas como esta.

  • Memoria que no se libera después de que el fragmento se elimina
  • Android.view.InflateException: Línea # 2 del archivo XML binario: Error al inflar la clase <unknown>
  • La aplicación android se bloquea sin ninguna excepción al intentar iniciar sesión con google plus
  • ¿Cuál es la diferencia entre el montón de dalvik y el montón nativo en android? Cuál se fija.?
  • Guardar en tarjeta SD como archivo de texto
  • Cómo funciona el servicio Foreground (proceso diferente / mismo proceso) cuando Android tiene poca memoria
  • En Android SQLite, trabajar directamente con Cursor es más eficiente en la memoria que crear objetos de modelo?
  • Significado de los iconos en HPROF Viewer en Android Studio
  • Cómo utilizar Eclipse Memory Analyzer Tool (MAT) para analizar un hashmap
  • ¿Tiene Android Studio una herramienta de análisis de memoria como MAT en Eclipse?
  • Liberar memoria de una actividad particular cuando se destruye
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.