最近,在项目中做性能优化需要监控进程运行时内存。
笔者在Android 查看第三方应用进程的内存开销_xiaobaaidaba123的专栏-CSDN博客_android 内存开销
介绍过使用adb命令查看进程的内存开销。但是如果需要持续监控的话,需要另外的方法。
网上查找了下 使用ActivityManager 中的 getProcessMemoryInfo()方法可以获取到进程运行时内存,但是这个接口在 android P以上 限频了,拿到的内存可能是过去时间的,不准确。
因此本文介绍的是另外一种方法:通过读取
"/proc/" + android.os.Process.myPid() + "/status" 路径文件里的信息获取。
public static long getProcessRealMemory() {
String memFilePath = "/proc/" + android.os.Process.myPid() + "/status";
BufferedReader bufferedReader = null;
try {
FileInputStream fileInputStream = new FileInputStream(memFilePath);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
Log.d(TAG, " read line : " + line);
if(!TextUtils.isEmpty(line) && line.contains("VmRSS")) {
String rss = line.split(":")[1].trim().split( " ")[0];
return Integer.parseInt(rss) * 1024;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(bufferedReader != null) {
try{
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return -1;
}
效果可行:
CODING | 一站式软件研发管理平台