Emmagee(三)-获取内存信息
来源:互联网 发布:carven淘宝旗舰店 编辑:程序博客网 时间:2024/05/21 09:59
介绍
内存是手机中最纠结的内容,特别是android手机,图片的OOM,甚至衍生到初始化界面都会Crash,内存成为开发最头痛的问题了,最简单的莫过于内存泄露了。Emmagee 虽然说不能够真正的监控到应用程序的内存泄露的问题。但是它已经将一些我们需要的基础的东西监控到了,不过真正用来监控应用工具还是使用android studio ,不过这些都是后话。
总内存
Emmagee获取内存的方式是读取 proc目录下的meminfo文件,我们看看meminfo内容:
1|root@android:/proc # cat meminfo
MemTotal: 364608 kB
MemFree: 31164 kB
Buffers: 15340 kB
Cached: 79620 kB
SwapCached: 0 kB
Active: 126356 kB
Inactive: 140748 kB
Active(anon): 83620 kB
Inactive(anon): 92060 kB
Active(file): 42736 kB
Inactive(file): 48688 kB
Unevictable: 352 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 8 kB
代码如下:
public long getTotalMemory() { String memInfoPath = "/proc/meminfo"; String readTemp = ""; String memTotal = ""; long memory = 0; try { FileReader fr = new FileReader(memInfoPath); BufferedReader localBufferedReader = new BufferedReader(fr, 8192); while ((readTemp = localBufferedReader.readLine()) != null) { if (readTemp.contains("MemTotal")) { String[] total = readTemp.split(":"); memTotal = total[1].trim(); } } localBufferedReader.close(); String[] memKb = memTotal.split(" "); memTotal = memKb[0].trim(); Log.d(LOG_TAG, "memTotal: " + memTotal); memory = Long.parseLong(memTotal); } catch (IOException e) { Log.e(LOG_TAG, "IOException: " + e.getMessage()); } return memory;}
以上的代码实际上很简单的,通过字符串的分割查找到MemTotol的值而已。
剩余内存
ActivityManager.getMemoryInfo()主要是用于得到当前系统剩余内存的及判断是否处于低内存运行。
public long getFreeMemorySize(Context context) { ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo(); ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); am.getMemoryInfo(outInfo); long avaliMem = outInfo.availMem; return avaliMem / 1024;}
当前应用使用内存
当前应用使用的内存才是我们主要关注的值。获取当前进程内存的方式也同样是通过am的方式进行获取的。
public int getPidMemorySize(int pid, Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); int[] myMempid = new int[] { pid }; Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(myMempid); memoryInfo[0].getTotalSharedDirty(); int memSize = memoryInfo[0].getTotalPss(); return memSize;}
getProcessMemoryInfo:
获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。
- Emmagee(三)-获取内存信息
- Emmagee学习之获取内存及CPU占用等数据
- 获取进程内存信息
- 获取内存信息
- Android 获取内存信息
- Android获取内存信息
- 获取内存缓冲区信息
- Android获取内存信息 .
- ios获取内存信息
- Android获取内存信息
- 获取内存信息
- Android获取内存信息
- Android获取内存信息
- c# 获取内存信息
- android获取内存信息
- 获取内存NUMA信息
- 三、获取寄存器信息
- 用API获取内存信息
- C++11多线程(一):语言层面的并发
- GCC跟G++区别
- 后台页面3大布局用到的iframe
- C# 中DateTime的各种使用
- leetcode -- Different Ways to Add Parentheses -- 重点
- Emmagee(三)-获取内存信息
- python3.4下PyQt5信号槽使用
- 创建,查看,删除,修改数据库
- 远程通过命令行开启局域网计算机的远程桌面服务
- php 类的构造方法 __construct
- 现代密码学 实验
- 如何跳转到另一个activity并且关闭当前的activity
- Hadoop IO 特性详解(1)【数据完整性】
- 时间序列算法的改善