android内存性能数据获取--api篇

是这样的,卤煮最近刚写一个性能自动化监控工具,其中针对播放器那块需要监控内存和cpu,选用的框架是instrumentation框架,所以只能用api方式啦。当然,获取内存数据其实有很多方式,包括
- adb shell dumpsys meminfo [pkg]
- cat /proc/meminfo
- android monitor图形界面
- 然后就是我们今天要学习的android原生提供的api

android原生的api提供获取两类内存数据,一类是整体内存,另一个是指定进程的内存数据。
涉及到的类就两个:ActivityManager和Debug类

获取系统内存以及判断系统是否要杀人了

ActivityManager activityManager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);
        Log.v(TAG,"我的机器一共有:" + memoryInfo.totalMem + "内存");
        Log.v(TAG,"其中可用的有:" + memoryInfo.availMem + "内存");
        Log.v(TAG,"其中达到:" + memoryInfo.threshold + "就会有可能触发LMK,系统开始杀进程了");
        Log.v(TAG,"所以现在的状态是:" + memoryInfo.lowMemory );

所以结果是
这里写图片描述

获取当前进程的内存情况

Debug.MemoryInfo memoryInfo1 = new Debug.MemoryInfo();
        Debug.getMemoryInfo(memoryInfo1);
        Log.v(TAG,"Dalvik的PSS值为:" + memoryInfo1.dalvikPss);
        Log.v(TAG,"程序的PSS的值为:"+memoryInfo1.getTotalPss());
        Log.v(TAG,"我是安卓6.0以上才有的方法哦,获取java-heap:"+memoryInfo1.getMemoryStat("summary.java-heap"));
        Log.v(TAG,"我是安卓6.0以上才有的方法哦,获取total-pss:"+memoryInfo1.getMemoryStat("summary.total-pss"));

所以方法就这么几个:
android内存性能数据获取--api篇_第1张图片
其中需要注意的是6.0新增的getMemoryStat,传入的参数直接ctrl+左键就看到了。
重点来了,Debug的meminfo可以看成是dumpsys meminfo的集合
android内存性能数据获取--api篇_第2张图片
前面的例子就是分别获取了Dalvik Heap 、Total Pss、java heap,对着这个命令应该好理解了。

获取其他进程?

还是用到ActivityManager

Debug.MemoryInfo[] memoryInfos = activityManager.getProcessMemoryInfo(new int[]{your pid});

看,返回的还是Debug.MemoryInfo,pid获取依然是ActivityManager,比如我要获取我包名的pid:

List.RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses();
        for(ActivityManager.RunningAppProcessInfo info:runningAppProcessInfos){
            if(info.pkgList[0].contains("mygl")){
                Log.v(TAG,"我的pid是:"+info.pid);
            }
        }

我的包名是com.cloudhuan.mygl,顺带一提,网易的emmagee就是采用这种方式测量内存的。

总结:

api获取内存,需要掌握4个获取系统级别的api,以及运行某进程的内存情况,重点关注的是pss,因为系统看到的就是这个平均下来的内存展示。

你可能感兴趣的:(android内存性能数据获取--api篇)