A continuación se muestra mi fórmula para comprobar la cantidad de memoria restante (no la cantidad de memoria que queda en el montón actual, sino la cantidad de memoria que se puede utilizar antes de que la aplicación falle). No estoy remotamente seguro de que esto sea correcto, ¿verdad?Android: ¿cómo verificar cuánta memoria queda?
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);
¿Estoy entendiendo mal algo? ¿Por qué 'getNativeHeapFreeSize()' http://goo.gl/wsBKT no es lo que quería? – Pacerier
La diferencia entre maxMemory() y heapSize() es la cantidad de memoria que puede estar bastante segura de que está disponible para una asignación contigua grande. La cantidad adicional indicada por freeMemory() es la cantidad actualmente no asignada dentro del montón actual, lo que significa que una parte de esa cantidad probablemente esté fragmentada, la cantidad de la cual dependería del incremento utilizado para hacer crecer el montón cuando sea necesario, y cómo gran parte de ese incremento ya se utilizó y luego se devolvió. Entonces, usar su número "restante" arriba puede ser arriesgado si necesita memoria adicional en un bloque contiguo. – Carl
Agregaría que en lugar de probar dinámicamente para ver cuánta memoria hay disponible, probar una cantidad de casos de uso extremo durante el desarrollo para una variedad de valores de maxMemory() y asegurarme de que su aplicación pueda manejarlos podría ser un mejor enfoque. Porque si descubres en cierto punto que te estás acercando a los límites de tu memoria, puede ser difícil deshacerte de lo que estás haciendo de una manera que no sea descortés para el usuario. – Carl