获取用户PID
1、SDK版本大于26
1.找出所属pid
命令:ps -A|grep packageName(WINDOWS环境下将grep替换成findstr),下图第二列数据即为 PID
2、SDK版本小与26:ps |grep packageName(跟上面方法类似 )
获取用户UID
命令: dumpsys package packageName|findstr userId
Android环境下获取内存
通过ActivityManager获取对应PID占用的内存
ActivityManager mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo[] memoryInfoArray = mAm.getProcessMemoryInfo(pids);
MemoryInfo pidMemoryInfo = memoryInfoArray[0];
value[0] = pidMemoryInfo.nativePss;
value[1] = pidMemoryInfo.dalvikPss;
value[2] = pidMemoryInfo.getTotalPss();
Android环境下获取流畅度
Choreographer.getInstance().postFrameCallback(
new Choreographer.FrameCallback(){
@Override
public void doFrame(long frameTimeNanos){
//每次绘制都加1
result+=1;
}
}
)
//上面这个方法需要不停调用
//计算公式: 流畅度=( result*1000)/采集间隔周期(单位ms)
Android环境下获取消耗的流量
获取上传流量
TrafficStats.getUidTxBytes(pid)
获取下载流量
TrafficStats.getUidRxBytes(pid)
ADB命令获取内存
获取设备总内存命令:adb shell cat /proc/meminfo |findstr MemTotal
获取指定包名占用内存: adb shell dumpsys meminfo pakagename
获取指定包名内存方式二:adb shell top -n 1 |findstr packageName (部分机型包名结尾会显示+导致无法匹配 )
获取CPU占有率的方法
1.获取指定pid的CPU开始执行前占用时间
命令:adb shell cat /proc/pid/stat (如果文件不存在,则说明该进程不是Android系统维护,无法获取对应CPU)
startProcessCpu =24446+10320;
2.获取总的CPU开始执行前占用时间
命令:adb shell cat /proc/stat
startCpu=9096266+....323086+0+0+0;
3.休眠1秒
4.再次执行步骤1、2
endProcessCpu=步骤1;
endCpu =步骤2;
5.最后取得CPU占用率公式如下:
((endProcessCpu-startProcessCpu)/(endCpu-startCpu))*100
6.进程的jiffies数为:startProcessCpu
流量
1、下载流量
命令: adb shell cat /proc/net/xt_qtaguid/stats |grep -E "uid"
第6列数据即为下载流量(这里需要将LO(本地)的流量排除掉)
2、上传流量
命令: adb shell cat /proc/net/xt_qtaguid/stats |grep -E " uid"
第8列数据即为下载流量(主要需要将LO(本地)的流量排除掉)