it-swarm.it

Come ottenere totale RAM dimensione di un dispositivo?

Voglio ottenere la dimensione RAM completa di un dispositivo. memoryInfo.getTotalPss() restituisce 0. Non c'è funzione per ottenere la dimensione RAM totale in ActivityManager.MemoryInfo .

Come fare questo?

21
BOOMik

Comando unix standard: $ cat /proc/meminfo

Si noti che /proc/meminfo è un file. In realtà non devi eseguire cat, puoi semplicemente leggere il file.

19
cweiske

A partire dal livello 16 dell'API ora puoi usare la proprietà totalMem della classe MemoryInfo.

Come questo:

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

Api livello 15 e inferiore richiede ancora l'uso del comando unix come mostrato in risposta di cweiske .

33
Leon Lucardie

Posso ottenere la memoria RAMutilizzabile in questo modo

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

Testato su Android 4.3: SAMSUNG S3

18
Shihab Uddin

È possibile ottenere la dimensione totale RAM utilizzando questo codice:

var activityManager = GetSystemService (Activity.ActivityService) come ActivityManager; 
 var memoryInfo = new ActivityManager.MemoryInfo (); 
 activityManager.GetMemoryInfo (memoryInfo); 
 
 var totalRam = memoryInfo.TotalMem/(1024 * 1024);

Se il dispositivo ha 1 GB di RAM, totalRam sarà 1000.

3
Bruno A. Klein

Di seguito è riportato un semplice metodo per ottenere il totale e disponibile RAM:

//Method call returns the free RAM currently and returned value is in bytes.
Runtime.getRuntime().freeMemory();

//Method call returns the total RAM currently and returned value is in bytes.
Runtime.getRuntime().maxMemory();

Spero che questo funzionerà.

Per la formattazione del valore in KB e MB, è possibile utilizzare il seguente metodo:

/**
     * Method to format the given long value in human readable value of memory.
     * i.e with suffix as KB and MB and comma separated digits.
     *
     * @param size Total size in long to be formatted. <b>Unit of input value is assumed as bytes.</b>
     * @return String the formatted value. e.g for input value 1024 it will return 1KB.
     * <p> For the values less than 1KB i.e. same input value will return back. e.g. for input 900 the return value will be 900.</p>
     */
    private String formatSize(long size) {
        String suffix = null;

        if (size >= 1024) {
            suffix = " KB";
            size /= 1024;
            if (size >= 1024) {
                suffix = " MB";
                size /= 1024;
            }
        }

        StringBuilder resultBuffer = new StringBuilder(Long.toString(size));

        int commaOffset = resultBuffer.length() - 3;
        while (commaOffset > 0) {
            resultBuffer.insert(commaOffset, ',');
            commaOffset -= 3;
        }

        if (suffix != null) resultBuffer.append(suffix);
        return resultBuffer.toString();
    }

Il corpo del metodo può essere personalizzato per ottenere risultati desiderabili.

0
Manmohan Soni