Alto uso de memoria RAM para la aplicación vacía de Android
Tengo una aplicación androide muy simple con una sola actividad que tiene solamente 1 TextView que dice "hola mundo". La aplicación no hace nada más. Es la aplicación predeterminada que obtienes al crear una nueva aplicación en Android Studio. Básicamente, la aplicación no hace nada.
Como se esperaba, cuando intenta hacer análisis de memoria para esta aplicación, el Monitor de dispositivos Android muestra un uso de memoria muy pequeño (tamaño de montón ~ 10 MB, asignación de montón ~ 3 MB) en dispositivos hdpi / mdpi como MotoE, MotoG etc.
- Configuración de Android AppWidget - Comienza en una nueva tarea
- Obtenga el tamaño de RAM total que utiliza Aplicación en Android
- Cómo hacer que la aplicación de Android que "come" la memoria RAM
- Android: ¿Cuánta memoria utiliza mi aplicación?
- Razones por las que mi aplicación Android se bloquea en mi teléfono de forma consistente, pero no en mi emulador
Sin embargo, en los dispositivos xhdpi / xxhdpi (Nexus 5, Xiaomi Mi3, Mi4i, Samsung Galaxy Note 2 etc), el tamaño del montón de la aplicación dispara de repente a 31 MB y la asignación a 23 MB.
Aquí hay una captura de pantalla del monitor de dispositivos Android para Xiaomi Mi3:
Tomé un volcado de montón y lo abrí en la herramienta de análisis de memoria (MAT). Los 2 principales sospechosos de fugas fueron las clases "android.content.res.Resources" y "android.graphics.NinePatch", con una asignación de 20,3 MB sólo para los 2 de ellos.
The class "android.content.res.Resources", loaded by "<system class loader>", occupies 87,24,208 (36.45%) bytes. The memory is accumulated in one instance of "android.util.LongSparseArray[]" loaded by "<system class loader>". 217 instances of "android.graphics.NinePatch", loaded by "<system class loader>" occupy 1,26,11,616 (52.70%) bytes. These instances are referenced from one instance of "java.lang.Object[]", loaded by " <system class loader>"
También hubo una pista que decía que los dos sospechosos pueden estar relacionados, porque las cadenas de referencia tienen un comienzo común.
¿Por qué es una cantidad tan grande de memoria heap asignada a estas 2 clases para una aplicación tan simple, que básicamente no hace nada?
- Diferenciar entre un inicio de actividad de la pantalla de inicio o de otra actividad de la aplicación
- Android, veo que el montón crece, pero quiero que pare
- Cómo controlar la pila trasera de Android
- Cómo borrar la pila de Android de las actividades?
- Notificación de Android - java.lang.Throwable: volcado de pila
- Restaurar la pila posterior de Android después de cerrar la aplicación
- 17.8 MiB asignación de montón para un simple "Hello World" proyecto?
- ¿Cómo depurar Android ANR?
- Api de Google+ que trabaja en el dispositivo a través de android studio pero no después del despliegue de la aplicación en playstore
- El teclado no empuja el contenido de la webview ni el cambio de tamaño