Android工具类之内存信息获取

本文详细介绍了在Android开发中如何获取设备的内存信息,包括使用ActivityManager类、MemoryInfo类以及dumpsys命令来收集内存统计数据。同时,讨论了如何解析这些数据以了解应用程序的内存占用情况,并提供了分析内存泄漏和优化内存使用的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
     * <p>
     * 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
     */
    private 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;
    }

    private static String memoryTotal;

    public static String getMemTotal() {
        if (!TextUtils.isEmpty(memoryTotal)) {
            return memoryTotal;
        }
        String result = null;

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


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

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

        return result;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值