如何使用Java检索Android设备上的可用RAM

本文概述

  • A. Android API级别> = 16(JellyBean及更高版本)
  • B.任何Android API级别
你的Android设备上的RAM不仅存储Linux内核, 还存储来自所有已安装的应用程序, GPU等的其他类型的数据。设置中列出的可用RAM可能与你已安装的RAM总量不同设备。如果要在Android应用程序上显示此信息, 则需要根据要定位的Android版本弄乱不同的代码。
在本文中, 我们将向你展示如何在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类读取文件。该文件包含类似于以下内容的结构:
如何使用Java检索Android设备上的可用RAM

文章图片
因此, 你将需要处理文本以提取所需的内容, 在本例中, 我们将使用正则表达式进行处理并保持其简单性, 以下方法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】编码愉快!

    推荐阅读