studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android

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);