本文主要是介绍Android获取总内存和可用内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、原理
基于 /proc/meminfo 信息读取
/* /proc/meminfoMemTotal: 2902436 kBMemFree: 199240 kBMemAvailable: 1088764 kBBuffers: 40848 kBCached: 862908 kBSwapCached: 54696 kBActive: 1222848 kBInactive: 671468 kBActive(anon): 758516 kBInactive(anon): 242560 kBActive(file): 464332 kBInactive(file): 428908 kBUnevictable: 5972 kBMlocked: 256 kBSwapTotal: 1048572 kBSwapFree: 537124 kBDirty: 12 kBWriteback: 0 kBAnonPages: 988820 kBMapped: 508996 kBShmem: 4800 kBSlab: 157204 kBSReclaimable: 57364 kBSUnreclaim: 99840 kBKernelStack: 41376 kBPageTables: 51820 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 2499788 kBCommitted_AS: 76292324 kBVmallocTotal: 258867136 kBVmallocUsed: 0 kBVmallocChunk: 0 kBCmaTotal: 0 kBCmaFree: 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/meminfoMemTotal: 2902436 kBMemFree: 199240 kBMemAvailable: 1088764 kBBuffers: 40848 kBCached: 862908 kBSwapCached: 54696 kBActive: 1222848 kBInactive: 671468 kBActive(anon): 758516 kBInactive(anon): 242560 kBActive(file): 464332 kBInactive(file): 428908 kBUnevictable: 5972 kBMlocked: 256 kBSwapTotal: 1048572 kBSwapFree: 537124 kBDirty: 12 kBWriteback: 0 kBAnonPages: 988820 kBMapped: 508996 kBShmem: 4800 kBSlab: 157204 kBSReclaimable: 57364 kBSUnreclaim: 99840 kBKernelStack: 41376 kBPageTables: 51820 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 2499788 kBCommitted_AS: 76292324 kBVmallocTotal: 258867136 kBVmallocUsed: 0 kBVmallocChunk: 0 kBCmaTotal: 0 kBCmaFree: 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
这篇关于Android获取总内存和可用内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!