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获取设备内存数据信息相关推荐

  1. android获取进程内存使用信息、一键加速(内存清理)与进程重要级别解析

    android获取进程内存使用信息.一键加速(内存清理)与进程重要级别解析 获取进程内存使用信息 获取单个或多个进程 获取系统内存状态的信息 MemoryInfo说明 内存清理 killBackgro ...

  2. [Android] 获取设备的APP信息

    为什么80%的码农都做不了架构师?>>>    (1)获取设备安装的APP列表 主要有两个方法: public abstract List<ApplicationInfo> ...

  3. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )

    文章目录 一.Android 命令行中获取要调试的应用进程的 PID 二.进程注入调试进程内存的 so 库 一.Android 命令行中获取要调试的应用进程的 PID 前置博客 [Android 逆向 ...

  4. Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)

    Android获取设备各项信息(设备id.ip地址.APP应用名称.设备名称.运行商.品牌.型号.分辨率.处理器.国家码.系统语言.网络类型.oaid.android版本.操作系统版本.mac地址.应 ...

  5. Android -- 获取设备硬件信息

    Android – 获取设备硬件信息 通过 Build 获取指定字段信息: 信息 方法 例子 主板 Build.BOARD PAR 系统定制商 Build.BRAND HUAWEI 硬件名称 Buil ...

  6. snmp获取设备相关管理信息

    snmp获取设备相关管理信息 在本文中,作者将向我们展示如何用snmp代理监视网络设备,甚至发送软件警告. 网络上很多代理在为我们服务.只要我们开启UDP/161,162端口,这些代理就会以Manag ...

  7. iOS获取设备UDID/IMEI信息

    标题iOS获取设备UDID/IMEI信息 通过Safari与mobileconfig获取iOS设备UDID UDID (Unique Device Identifier),唯一标示符,是iOS设备的一 ...

  8. android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...

    一,先说获取渠道名(这里以友盟为例) /* * 4.5.1新加渠道名字段,用来传给后台去统计各个渠道下载量 * */ public static String getSource() { //获取渠道 ...

  9. Android获取设备状态栏status bar高度的正确姿势

    Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...

最新文章

  1. mysql存储过程参数可选,如何在T-SQL存储过程中使用可选参数?
  2. 10 个深恶痛绝的 Java 异常。。
  3. Spring Boot 进行优雅的字段校验,写得太好了!
  4. 网络编程-计算机网络
  5. html批量转doc linux,HTML+CSS入门 Linux下如何批量将md文件转换为html文件
  6. datav本地部署 java,Spring Boot对Spring Data JPA的自动配置
  7. java treemap_Java TreeMap HigherKey()方法与示例
  8. 程序员为什么老得快_这段 Python 代码让程序员赚 300W,公司已确认!网友:神操作!...
  9. Huawei LiteOS简介
  10. Network 20Q--Q2 How does Google sell ad spaces?
  11. Some Sites About .Net
  12. 数学模型——泊车模型(2022年Mathorcup数学建模挑战赛C题,含Matlab代码)
  13. 衣带渐宽终不悔为伊消得人憔悴,土蜂蜜科技终成正果
  14. MySQL索引及视图
  15. Delong test比较两个ROC曲线的性能
  16. Blog 【如何搭建自己的个人技术博客网站】
  17. 2018北航北理工保研推免经验分享---本科211图形图像方向
  18. 小柴胡灵活加减治杂病
  19. 逻辑学学习.8 --- 三段论逻辑(二):用文恩图检验三段论的有效性
  20. Python 获取EXSI宿主机上虚拟机数据

热门文章

  1. 【面试宝典】软件测试工程师2021烫手精华版(第一章测试理论篇)
  2. 基于html+JS实现canvas简易画图工具
  3. Java关于身份证验证的实现
  4. C++| 匠心之作 从0到1入门学编程【视频+课件+笔记+源码】
  5. 什么是穿透式监管,需要投资者做什么?
  6. 安静!听听AI眼中岛国老师的声音~
  7. 粗虚线和细虚线_车道划分线上下两侧有粗虚线
  8. 2020年chx的计算机保研之路系列(3)——中科院计算所(获得offer)
  9. QWebEngineView右键菜单翻译
  10. Unable to install breakpoint in