Cómo interpretar los valores de / proc / meminfo en Android?

Estoy escribiendo una aplicación para Android que necesita medir RAM libre actual / utilizada.

La búsqueda en este sitio mostró múltiples hilos con temas similares que generalmente sugieren dos enfoques:


Enfoque 1:

MemoryInfo mi = new MemoryInfo(); ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); activityManager.getMemoryInfo(mi); long availableMegs = mi.availMem / 1048576L; totalMegs = mi.totalMem / 1048576L; //available since API 16 only 

Enfoque 2: análisis / proc / meminfo.

He intentado ambos enfoques y parecen funcionar bien. Obtengo los mismos valores de ambos métodos. Mi problema es que cuando vaya a Settings -> Apps -> Running en la parte inferior de la pantalla es información acerca de RAM libre / utilizado y esto difiere de lo que obtengo con los métodos mencionados anteriormente. Mi sospecha es que Google informa de las aplicaciones almacenadas en caché como de memoria libre, porque cuando mato algunos procesos en caché, el uso de memoria RAM de Google apenas cambia, pero mis aplicaciones lo hacen en una cantidad cercana al tamaño del proceso que acabo de matar.

Ejemplo:

Aproximación 1 salida:

 meminfo: avail: 660, total: 821, used: 161 

Salida del enfoque 2:

 root@android:/proc # cat meminfo MemTotal: 840868 kB MemFree: 548080 kB Buffers: 0 kB Cached: 128300 kB SwapCached: 0 kB Active: 192052 kB Inactive: 79816 kB Active(anon): 157792 kB Inactive(anon): 0 kB Active(file): 34260 kB Inactive(file): 79816 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 143580 kB Mapped: 67584 kB Slab: 6736 kB SReclaimable: 2104 kB SUnreclaim: 4632 kB PageTables: 4008 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 420432 kB Committed_AS: 1606616 kB VmallocTotal: 122880 kB VmallocUsed: 20588 kB VmallocChunk: 77828 kB MemFree + Cached = 660MB Android reported RAM usage: 679MB Free, 142MB used. 

¿Cómo puedo obtener los mismos números que los informes de Android?

Asumo que tengo que conseguirlo de /proc/meminfo como la API oficial parece no existir.

MemTotal – Cantidad total de RAM física, en kilobytes.

MemFree – La cantidad de RAM física, en kilobytes, no utilizada por el sistema.

Buffers – La cantidad de RAM física, en kilobytes, utilizada para los búferes de archivos.

En caché: cantidad de RAM física, en kilobytes, utilizada como memoria caché.

SwapCached – La cantidad de intercambio, en kilobytes, utilizada como memoria caché.

Active – La cantidad total de caché o memoria caché de página, en kilobytes, que está en uso activo. Se trata de memoria que se ha utilizado recientemente y que normalmente no se recupera para otros fines.

Inactivo: cantidad total de caché o memoria caché de páginas, en kilobytes, que están libres y disponibles. Se trata de una memoria que no se ha utilizado recientemente y que puede recuperarse para otros fines.

HighTotal y HighFree – La cantidad total y libre de memoria, en kilobytes, que no se mapea directamente en el espacio del kernel. El valor HighTotal puede variar en función del tipo de kernel utilizado.

LowTotal y LowFree – La cantidad total y libre de memoria, en kilobytes, que se mapea directamente en el espacio del kernel. El valor de LowTotal puede variar en función del tipo de kernel utilizado.

SwapTotal: cantidad total de swap disponible, en kilobytes.

SwapFree – La cantidad total de swap libre, en kilobytes.

Dirty – La cantidad total de memoria, en kilobytes, esperando para ser escrita de nuevo en el disco. Writeback – La cantidad total de memoria, en kilobytes, que se está escribiendo activamente en el disco.

Mapped – La cantidad total de memoria, en kilobytes, que se han utilizado para asignar dispositivos, archivos o bibliotecas mediante el comando mmap.

Slab – La cantidad total de memoria, en kilobytes, utilizada por el kernel para almacenar en caché estructuras de datos para su propio uso.

Committed_AS: cantidad total de memoria, en kilobytes, estimada para completar la carga de trabajo. Este valor representa el valor de caso más desfavorable y también incluye la memoria de intercambio. PageTables – La cantidad total de memoria, en kilobytes, dedicada al nivel de tabla de páginas más bajo.

VMallocTotal: cantidad total de memoria, en kilobytes, del espacio de direcciones virtual asignado total.

VMallocUsed – La cantidad total de memoria, en kilobytes, del espacio de direcciones virtual utilizado.

VMallocChunk: el bloque contiguo más grande de memoria, en kilobytes, de espacio de direcciones virtual disponible.

HugePages_Total – El número total de páginas enormes para el sistema. El número se obtiene dividiendo Hugepagesize por los megabytes reservados para hugepages especificados en / proc / sys / vm / hugetlb_pool. Esta estadística sólo aparece en las arquitecturas x86, Itanium y AMD64.

HugePages_Free – El número total de páginas enormes disponibles para el sistema. Esta estadística sólo aparece en las arquitecturas x86, Itanium y AMD64.

Hugepagesize – El tamaño de cada unidad de enormes páginas en kilobytes. De forma predeterminada, el valor es 4096 KB en kernels uniprocesador para arquitecturas de 32 bits. Para SMP, hugemem kernels y AMD64, el valor predeterminado es 2048 KB. Para arquitecturas Itanium, el valor predeterminado es 262144 KB. Esta estadística sólo aparece en las arquitecturas x86, Itanium y AMD64.

La Settings -> Apps -> Running , en alto nivel tiene dos particiones: used y free .

Sin embargo, cuando miras más de cerca, el Running sólo contiene ocupa una parte de used ;

Del mismo modo, al hacer clic en el botón show cached processes (en la parte superior izquierda), verá (en la parte inferior) que sólo ocupan una parte de free ; La otra parte debe ser la memoria libre real (es decir, sin ninguna aplicación en caché).

El problema es que no muestra ningún número. Y de la "porción" de la memoria libre real, parece todavía un poco diferente de lo que obtuvo por proc/meminfo .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.