2011-09-10 22 views
17

Quiero obtener el tamaño de RAM completo de un dispositivo. memoryInfo.getTotalPss() devuelve 0. No hay función para obtener el tamaño de RAM total en ActivityManager.MemoryInfo.¿Cómo obtener el tamaño de RAM total de un dispositivo?

¿Cómo hacer esto?

+1

'public static synchronized int readTotalRam() { \t \t int tm = 1000; \t try { \t RandomAccessFile reader = new RandomAccessFile ("/ proc/meminfo", "r"); \t Carga de cadena = reader.readLine(); \t Cadena [] totrm = load.split ("kB"); \t Cadena [] trm = totrm [0] .split (""); \t tm = Integer.parseInt (trm [trm.length-1]); \t tm = Math.round (tm/1024); \t} catch (IOException ex) { \t ex.printStackTrace(); \t} \t return tm; \t} ' – BOOMik

+1

Escribo la función para esto. ^^^ responda ^^^ – BOOMik

Respuesta

19

comando de Unix: $ cat /proc/meminfo

Tenga en cuenta que /proc/meminfo es un archivo. En realidad, no tiene que ejecutar cat, simplemente puede leer el archivo.

+0

Caché/archivo proc/meminfo y tamaño de ram recibido. – BOOMik

+0

Volvió a la versión original del autor de esta respuesta. Mientras Leon publica algo que funciona en niveles de API posteriores, eso no significa que este método ya no funcione. Las ediciones de terceros no se deben usar para comentar una respuesta: esa es la función de los comentarios o, en este caso, la propia respuesta de León. –

+0

Además, agregaré que desde el código que se ejecuta en el dispositivo, no hay ninguna razón para ejecutar un proceso 'cat'; en su lugar, simplemente lea'/proc/meminfo' de su Java o código nativo como si fuera un archivo de texto . Cat solo sería necesario si estuvieras trabajando en un shell, o accediendo a algo que requiriera que comenzaras un proceso bajo un ID de usuario diferente con un 'su 'pirateado. –

25

A partir del nivel 16 de la API ahora puede usar la propiedad totalMem de la clase MemoryInfo.

De esta manera:

ActivityManager actManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); 
actManager.getMemoryInfo(memInfo); 
long totalMemory = memInfo.totalMem; 

API de nivel 15 y más abajo aún requiere utilizar el comando UNIX como se muestra en cweiske's answer.

15

puedo conseguir la memoria RAM utilizable de manera

public String getTotalRAM() { 

    RandomAccessFile reader = null; 
    String load = null; 
    DecimalFormat twoDecimalForm = new DecimalFormat("#.##"); 
    double totRam = 0; 
    String lastValue = ""; 
    try { 
     reader = new RandomAccessFile("/proc/meminfo", "r"); 
     load = reader.readLine(); 

     // Get the Number value from the string 
     Pattern p = Pattern.compile("(\\d+)"); 
     Matcher m = p.matcher(load); 
     String value = ""; 
     while (m.find()) { 
      value = m.group(1); 
      // System.out.println("Ram : " + value); 
     } 
     reader.close(); 

     totRam = Double.parseDouble(value); 
     // totRam = totRam/1024; 

     double mb = totRam/1024.0; 
     double gb = totRam/1048576.0; 
     double tb = totRam/1073741824.0; 

     if (tb > 1) { 
      lastValue = twoDecimalForm.format(tb).concat(" TB"); 
     } else if (gb > 1) { 
      lastValue = twoDecimalForm.format(gb).concat(" GB"); 
     } else if (mb > 1) { 
      lastValue = twoDecimalForm.format(mb).concat(" MB"); 
     } else { 
      lastValue = twoDecimalForm.format(totRam).concat(" KB"); 
     } 



    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally { 
     // Streams.close(reader); 
    } 

    return lastValue; 
} 

Probado Hasta que Android 4.3: SAMSUNG S3

2

Usted puede obtener el tamaño total de la memoria RAM utilizando este código:

var activityManager = GetSystemService(Activity.ActivityService) as ActivityManager; 
var memoryInfo = new ActivityManager.MemoryInfo(); 
activityManager.GetMemoryInfo(memoryInfo); 

var totalRam = memoryInfo.TotalMem/(1024 * 1024);

Si el dispositivo tiene 1GB de RAM, totalRam será 1000.

+0

Su código de sintaxis y sus métodos no son correctos en java. ¿Está su Código en C# y xamarin? – amin

+0

Sí, lo publiqué solo para tener una base. –

Cuestiones relacionadas