Android获取设备内存数据信息
App分配内存
首先,我们通过Android系统提供的方法获取 分配给App本身的运行数据信息,这里我们能获取系统分配给App的最大内存信息(这个数据根据不同的机型可能会不一样),当前已分配内存大小,以及当前分配剩余内存大小等内存数据信息。
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
//设备内存
manager.getMemoryInfo(mi);
String totalMem = Formatter.formatFileSize(context, mi.totalMem);
System.out.println("设备的运行总内存 totalMem: " + totalMem);
String availMem = Formatter.formatFileSize(context, mi.availMem);
System.out.println("设备剩余运行内存 availMem: " + availMem);
//最大分配内存获取方法1
int memory = manager.getMemoryClass();
System.out.println("app可分配最大内存memory: " + memory);
//最大分配内存获取方法2
float maxMemory = (float) (Runtime.getRuntime().maxMemory() * 1.0 / (1024 * 1024));
System.out.println("app可分配最大内存 maxMemory: " + maxMemory);
//当前分配的总内存
float totalMemory = (float) (Runtime.getRuntime().totalMemory() * 1.0 / (1024 * 1024));
System.out.println("app当前分配内存totalMemory: " + totalMemory);
//当前分配使用剩余内存
float freeMemory = (float) (Runtime.getRuntime().freeMemory() * 1.0 / (1024 * 1024));
System.out.println("app当前分配剩余内存freeMemory: " + reeMemory);
设备运行内存
我们通过Android系统提供的方法获取设备的总运行内存数据信息,但是我们获取的可用内存信息可能不是很准确,可能会包含一些实际在运行的App所占内存信息。
manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
manager.getMemoryInfo(mi);
// double totalMem = (double) (mi.totalMem * 1.0 / (1024 * 1024));
String totalMem = Formatter.formatFileSize(context, mi.totalMem);
System.out.println(("设备的运行总内存: " + totalMem + " M"));
// double availMem= (double) (mi.availMem* 1.0 / (1024 * 1024));
String availMem = Formatter.formatFileSize(context, mi.availMem);
System.out.println(("设备剩余运行内存: " + availMem));
当然也有其他的方法获取内存信息,比如直接读取系统的内存信息保存文件 /proc/meminfo
直接读取此文件信息的方法如下
public static List<String> getMemInfo() {List<String> result = new ArrayList<>();try {String line;FileReader reader = new FileReader("/proc/meminfo");BufferedReader br = new BufferedReader(reader);while ((line = br.readLine()) != null) {result.add(line);}reader.close();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 getMemFree() {String result = null;try {result = getFieldFromMeminfo("MemFree");} 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;
}
Android获取设备内存数据信息相关推荐
- android获取进程内存使用信息、一键加速(内存清理)与进程重要级别解析
android获取进程内存使用信息.一键加速(内存清理)与进程重要级别解析 获取进程内存使用信息 获取单个或多个进程 获取系统内存状态的信息 MemoryInfo说明 内存清理 killBackgro ...
- [Android] 获取设备的APP信息
为什么80%的码农都做不了架构师?>>> (1)获取设备安装的APP列表 主要有两个方法: public abstract List<ApplicationInfo> ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )
文章目录 一.Android 命令行中获取要调试的应用进程的 PID 二.进程注入调试进程内存的 so 库 一.Android 命令行中获取要调试的应用进程的 PID 前置博客 [Android 逆向 ...
- Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
Android获取设备各项信息(设备id.ip地址.APP应用名称.设备名称.运行商.品牌.型号.分辨率.处理器.国家码.系统语言.网络类型.oaid.android版本.操作系统版本.mac地址.应 ...
- Android -- 获取设备硬件信息
Android – 获取设备硬件信息 通过 Build 获取指定字段信息: 信息 方法 例子 主板 Build.BOARD PAR 系统定制商 Build.BRAND HUAWEI 硬件名称 Buil ...
- snmp获取设备相关管理信息
snmp获取设备相关管理信息 在本文中,作者将向我们展示如何用snmp代理监视网络设备,甚至发送软件警告. 网络上很多代理在为我们服务.只要我们开启UDP/161,162端口,这些代理就会以Manag ...
- iOS获取设备UDID/IMEI信息
标题iOS获取设备UDID/IMEI信息 通过Safari与mobileconfig获取iOS设备UDID UDID (Unique Device Identifier),唯一标示符,是iOS设备的一 ...
- android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...
一,先说获取渠道名(这里以友盟为例) /* * 4.5.1新加渠道名字段,用来传给后台去统计各个渠道下载量 * */ public static String getSource() { //获取渠道 ...
- Android获取设备状态栏status bar高度的正确姿势
Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...
最新文章
- mysql存储过程参数可选,如何在T-SQL存储过程中使用可选参数?
- 10 个深恶痛绝的 Java 异常。。
- Spring Boot 进行优雅的字段校验,写得太好了!
- 网络编程-计算机网络
- html批量转doc linux,HTML+CSS入门 Linux下如何批量将md文件转换为html文件
- datav本地部署 java,Spring Boot对Spring Data JPA的自动配置
- java treemap_Java TreeMap HigherKey()方法与示例
- 程序员为什么老得快_这段 Python 代码让程序员赚 300W,公司已确认!网友:神操作!...
- Huawei LiteOS简介
- Network 20Q--Q2 How does Google sell ad spaces?
- Some Sites About .Net
- 数学模型——泊车模型(2022年Mathorcup数学建模挑战赛C题,含Matlab代码)
- 衣带渐宽终不悔为伊消得人憔悴,土蜂蜜科技终成正果
- MySQL索引及视图
- Delong test比较两个ROC曲线的性能
- Blog 【如何搭建自己的个人技术博客网站】
- 2018北航北理工保研推免经验分享---本科211图形图像方向
- 小柴胡灵活加减治杂病
- 逻辑学学习.8 --- 三段论逻辑(二):用文恩图检验三段论的有效性
- Python 获取EXSI宿主机上虚拟机数据