本文概述
- A. Android API级别> = 16(JellyBean及更高版本)
- B.任何Android API级别
在本文中, 我们将向你展示如何在Android设备中使用Java检索设备的最大可用RAM大小。
A. Android API级别> = 16(JellyBean及更高版本) 如果你的应用程序仅针对Android API Level> = 16的设备, 则可以使用依赖于Android活动管理器的方法:
A.1。获取以字节为单位的RAM大小
以下方法返回RAM的最大可用大小(以字节为单位)。它返回一个长变量, 例如1567342592:
import android.content.Context;
import java.text.DecimalFormat;
import android.app.ActivityManager;
/*** Returns the available ammount of RAM of your Android device in Bytes e.g 1567342592 (1.5GB)* @return {Long}*/public long getMemorySizeInBytes(){Context context = getApplicationContext();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
long totalMemory = memoryInfo.totalMem;
return totalMemory;
}
A2。获取人类可读格式的RAM大小(Mb, Gb, Tb)
以下方法以人类可读的格式返回RAM的可用大小。它将返回一个字符串, 例如2GB, 1.5GB:
import android.content.Context;
import java.text.DecimalFormat;
import android.app.ActivityManager;
/*** Returns the available ammount of RAM of your Android device in a human readable format e.g 1.56GB, 4GB, 512MB** @return {String}*/public String getMemorySizeHumanized(){Context context = getApplicationContext();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
DecimalFormat twoDecimalForm = new DecimalFormat("#.##");
String finalValuehttp://www.srcmini.com/= "";
long totalMemory = memoryInfo.totalMem;
double kb = totalMemory / 1024.0;
double mb = totalMemory / 1048576.0;
double gb = totalMemory / 1073741824.0;
double tb = totalMemory / 1099511627776.0;
if (tb >
1) {finalValue = http://www.srcmini.com/twoDecimalForm.format(tb).concat(" TB");
} else if (gb >
1) {finalValue = http://www.srcmini.com/twoDecimalForm.format(gb).concat(" GB");
} else if (mb >
1) {finalValue = http://www.srcmini.com/twoDecimalForm.format(mb).concat(" MB");
}else if(kb >
1){finalValue = http://www.srcmini.com/twoDecimalForm.format(mb).concat(" KB");
} else {finalValue = http://www.srcmini.com/twoDecimalForm.format(totalMemory).concat(" Bytes");
}return finalValue;
}
B.任何Android API级别 如果你的代码需要在任何Android版本上运行, 则可以(如在每个基于Linux的系统中一样)通过/ proc / meminfo文件检索RAM的数量。系统使用/ proc / meminfo来报告系统上的可用内存和已使用内存(物理内存和交换内存)以及内核使用的共享内存和缓冲区的数量。
为了在Android上读取提到的文件, 请依靠Java的RandomAccessFile类读取文件。该文件包含类似于以下内容的结构:
文章图片
因此, 你将需要处理文本以提取所需的内容, 在本例中, 我们将使用正则表达式进行处理并保持其简单性, 以下方法getMemorySizeHumanized返回一个具有人类可读大小的RAM的字符串, 例如2GB:
import android.content.Context;
import java.io.RandomAccessFile;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.IOException;
/** * Returns the available amount of RAM of your Android device in a human readable format e.g 1.56GB, 4GB, 512MB * * @return {String} */public String getMemorySizeHumanized() {RandomAccessFile reader;
String load;
DecimalFormat twoDecimalForm = new DecimalFormat("#.##");
double totRam;
String lastValuehttp://www.srcmini.com/= "";
try {reader = new RandomAccessFile("/proc/meminfo", "r");
load = reader.readLine();
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(load);
String valuehttp://www.srcmini.com/= "";
while (m.find()) {value = m.group(1);
}reader.close();
totRam = Double.parseDouble(value);
double mb = totRam / 1024.0;
double gb = totRam / 1048576.0;
double tb = totRam / 1073741824.0;
if (tb >
1) {lastValue = http://www.srcmini.com/twoDecimalForm.format(tb).concat(" TB");
} else if (gb >
1) {lastValue = http://www.srcmini.com/twoDecimalForm.format(gb).concat(" GB");
} else if (mb >
1) {lastValue = http://www.srcmini.com/twoDecimalForm.format(mb).concat(" MB");
} else {lastValue = http://www.srcmini.com/twoDecimalForm.format(totRam).concat(" KB");
}} catch (IOException ex) {ex.printStackTrace();
}return lastValue;
}
【如何使用Java检索Android设备上的可用RAM】编码愉快!
推荐阅读
- 如何解决Android Studio错误(无法解决符号”RandomAccessFile”)
- 如何在Java中打印三角形矩形图案(从左到右和从右到左)
- 如何在Java中轻松使用JSON
- Java技术指南「并发原理专题」AQS的技术体系之CLHMCS锁的原理及实现
- Java技术探索「开发实战专题」Lombok插件开发实践必知必会操作!
- Java ASM系列((056)opcode: method)
- 作为有经验的程序员如果不懂Lambda表达式就说不过去了吧,建议收藏!!!
- Java技术指南[Guava Collections]实战使用相关Guava不一般的集合框
- 面试java开发被问最多的“cookiesessiontoken”问题,安排!