Android获取总内存和可用内存

一、原理

基于 /proc/meminfo 信息读取

/* /proc/meminfo

        MemTotal:        2902436 kB
        MemFree:          199240 kB
        MemAvailable:    1088764 kB
        Buffers:           40848 kB
        Cached:           862908 kB
        SwapCached:        54696 kB
        Active:          1222848 kB
        Inactive:         671468 kB
        Active(anon):     758516 kB
        Inactive(anon):   242560 kB
        Active(file):     464332 kB
        Inactive(file):   428908 kB
        Unevictable:        5972 kB
        Mlocked:             256 kB
        SwapTotal:       1048572 kB
        SwapFree:         537124 kB
        Dirty:                12 kB
        Writeback:             0 kB
        AnonPages:        988820 kB
        Mapped:           508996 kB
        Shmem:              4800 kB
        Slab:             157204 kB
        SReclaimable:      57364 kB
        SUnreclaim:        99840 kB
        KernelStack:       41376 kB
        PageTables:        51820 kB
        NFS_Unstable:          0 kB
        Bounce:                0 kB
        WritebackTmp:          0 kB
        CommitLimit:     2499788 kB
        Committed_AS:   76292324 kB
        VmallocTotal:   258867136 kB
        VmallocUsed:           0 kB
        VmallocChunk:          0 kB
        CmaTotal:              0 kB
        CmaFree:               0 kB
    */

二、代码

package com.fadisu.cpurun.util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MemInfoUtil {


    public static List<String> getMemInfo() {
        List<String> result = new ArrayList<>();

        try {
            String line;
            BufferedReader br = new BufferedReader(new FileReader("/proc/meminfo"));
            while ((line = br.readLine()) != null) {
                result.add(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

    /* /proc/meminfo

        MemTotal:        2902436 kB
        MemFree:          199240 kB
        MemAvailable:    1088764 kB
        Buffers:           40848 kB
        Cached:           862908 kB
        SwapCached:        54696 kB
        Active:          1222848 kB
        Inactive:         671468 kB
        Active(anon):     758516 kB
        Inactive(anon):   242560 kB
        Active(file):     464332 kB
        Inactive(file):   428908 kB
        Unevictable:        5972 kB
        Mlocked:             256 kB
        SwapTotal:       1048572 kB
        SwapFree:         537124 kB
        Dirty:                12 kB
        Writeback:             0 kB
        AnonPages:        988820 kB
        Mapped:           508996 kB
        Shmem:              4800 kB
        Slab:             157204 kB
        SReclaimable:      57364 kB
        SUnreclaim:        99840 kB
        KernelStack:       41376 kB
        PageTables:        51820 kB
        NFS_Unstable:          0 kB
        Bounce:                0 kB
        WritebackTmp:          0 kB
        CommitLimit:     2499788 kB
        Committed_AS:   76292324 kB
        VmallocTotal:   258867136 kB
        VmallocUsed:           0 kB
        VmallocChunk:          0 kB
        CmaTotal:              0 kB
        CmaFree:               0 kB
    */
    public static String getFieldFromMeminfo(String field) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("/proc/meminfo"));
        Pattern p = Pattern.compile(field + "\\s*:\\s*(.*)");

        try {
            String line;
            while ((line = br.readLine()) != null) {
                Matcher m = p.matcher(line);
                if (m.matches()) {
                    return m.group(1);
                }
            }
        } finally {
            br.close();
        }

        return null;
    }

    public static String getMemTotal() {
        String result = null;

        try {
            result = getFieldFromMeminfo("MemTotal");
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }


    public static String getMemAvailable() {
        String result = null;

        try {
            result = getFieldFromMeminfo("MemAvailable");
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

}

三、运行结果

这里写图片描述

四、具体源码

https://github.com/sufadi/AndroidCpuTools

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值