web-dev-qa-db-ja.com

デバイスの合計RAMデバイスのサイズを取得する方法は?

フルに取得したいRAMデバイスのサイズ。memoryInfo.getTotalPss()は0を返します。合計を取得するための関数がありませんRAMサイズ- ActivityManager.MemoryInfo

これを行う方法?

26
BOOMik

標準のUNIXコマンド:$ cat /proc/meminfo

ご了承ください /proc/meminfoはファイルです。実際にcatを実行する必要はありません。ファイルを読み取るだけです。

19
cweiske

APIレベル16以降、totalMemクラスのMemoryInfoプロパティを使用できるようになりました。

このような:

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

APIレベル15以下では、 cweiskeの回答 に示すように、unixコマンドを使用する必要があります。

36
Leon Lucardie

使用可能なRAMメモリをこのような方法で取得できます

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

テスト済みAndroid 4.3:SAMSUNG S3

18
Shihab Uddin

このコードを使用すると、合計RAM=サイズを取得できます。

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

デバイスに1GBのRAMがある場合、totalRamは1000になります。

3
Bruno A. Klein

合計と利用可能な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();

これがうまくいくことを願っています。

値をKBおよびMBにフォーマットするには、次の方法を使用できます。

/**
     * 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();
    }

メソッド本体をカスタマイズして、望ましい結果を得ることができます。

1
Manmohan Soni