para - manual de programacion android pdf
Android: ¿cómo comprobar cuánta memoria queda? (2)
A continuación, se encuentra mi fórmula para verificar cuánta memoria queda (no cuánta memoria queda en el montón actual, sino cuánta más memoria puede utilizarse antes de que la aplicación se bloquee). No estoy seguro de que esto sea correcto, ¿verdad?
double max = Runtime.getRuntime().maxMemory(); //the maximum memory the app can use
double heapSize = Runtime.getRuntime().totalMemory(); //current heap size
double heapRemaining = Runtime.getRuntime().freeMemory(); //amount available in heap
double nativeUsage = Debug.getNativeHeapAllocatedSize(); //is this right? I only want to account for native memory that my app is being "charged" for. Is this the proper way to account for that?
//heapSize - heapRemaining = heapUsed + nativeUsage = totalUsage
double remaining = max - (heapSize - heapRemaininng + nativeUsage);
Este es un hilo viejo, pero esto parece funcionar:
Runtime.getRuntime().gc();
long memoryAvailable = (Runtime.getRuntime().maxMemory() -
Runtime.getRuntime().totalMemory() +
Runtime.getRuntime().freeMemory());
totalMemory-freeMemory
es la memoria utilizada actualmente.
Así que esto se reduce a:
(maximum possible memory)-(current used memory)
Edite para agregar: freeMemory no cuenta la memoria disponible para la recolección de basura, por lo que puede probar Runtime.getRuntime () .gc (), aunque tenga en cuenta que puede tener sus propias consecuencias (como hipo visual si se ejecuta en el subproceso de la IU).
Prueba el siguiente código. eso debería darle los resultados que está buscando (especialmente el campo Pss). Puedes leer más sobre esto here
Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
Debug.getMemoryInfo(memoryInfo);
String memMessage = String.format(
"Memory: Pss=%.2f MB, Private=%.2f MB, Shared=%.2f MB",
memoryInfo.getTotalPss() / 1024.0,
memoryInfo.getTotalPrivateDirty() / 1024.0,
memoryInfo.getTotalSharedDirty() / 1024.0);