Python 如何获取Android应用内存使用和CPU占用信息,并且时时展示曲线图形。

Python 如何获取Android应用内存使用和CPU占用信息,并且时时展示曲线图形。

最近测试公司产品时发现进入聊天界面后再退出,内存占用没有减小。考虑到其他测试人员没有产品源代码查看权限,又不懂怎么使用Android Studio ,如果需要测试某些地方的内存和CPU占用情况,可能需要另外的辅助工具,一边测试一边查看内存和CPU占用情况,能够快速的找到某些操作会导致内存增加了而且没有释放掉。在下才疏学浅,不知道是否还有其他更牛逼的工具(如果你知道有可以告诉我,跪求教育可怜),于是自己动手写。好吧 !废话不多说,开始正题。

想要获取 某个应用内存和CPU占用信息,使用两个adb命令就行

内存 :adb shell dumpsys meminfo 包名
CPU占用:adb shell top -m 100 -n 1 -s cpu

当我们在终端输入 adb shell dumpsys meminfo 包名 ,我们知道图中圈出来的数字是我们的内存使用总和,就是我们要的数据
这里写图片描述
那我们想要实时的展示这个数据,就要实时的去获取,那就简单了,我们先写方法,然后按照一点时间差去执行这两个命令就好了。

def getTotalPss():
    lines = os.popen("adb shell dumpsys meminfo com.hellotalk ").readlines() #逐行读取
    total = "TOTAL"
    for line in lines:
        if re.findall(total, line): # 找到TOTAL 这一行
            lis = line.split(" ")  #将这一行,按空格分割成一个list
            while '' in lis:       # 将list中的空元素删除
                lis.remove('')
            return lis[1] #返回总共内存使用

cpu占有率也是同样的道理

def getCpu():
    li = os.popen("adb shell top -m 100 -n 1 -s cpu").readlines()
    name = "com.hellotalk"
    for line in li:
        if re.findall(name,line):
            cuplist = line.split(" ")
            if cuplist[-1].strip() == 'com.hellotalk':
                while '' in cuplist:       # 将list中的空元素删除
                    cuplist.remove('')
                return float(cuplist[2].strip('%')) #去掉百分号,返回一个float

写完两个方法后,就开始 写获取数据了,为了能时时展示曲线图,这里我们要用到 matplotlib 这个库,我借鉴了下网络上一些写法,修改了下
比较简单,代码如下:

from matplotlib import pyplot as plt
from matplotlib import animation

fig = plt.figure()
ax1 = fig.add_subplot(2,1,1,xlim=(0, 100), ylim=(0, 350))
ax2 = fig.add_subplot(2,1,2,xlim=(0, 100), ylim=(0, 100))
line, = ax1.plot([], [], lw=2)
line2, = ax2.plot([], [], lw=2)
x = []
y= []
y2 = []
def init():
    line.set_data([], [])
    line.set_data([], [])
    return line,line2
def getx():
    t = "0"
    return t

def animate(i):
    x.append(int(getx())+i)
    y.append(int(getTotalPss())/1024) #每执行一次去获取一次值加入绘制的data中
    y2.append(getCpu())
    print x,y
    line.set_data(x,y)
    line2.set_data(x,y2)
    return line,line2

anim1 = animation.FuncAnimation(fig, animate, init_func=init,  frames=1000, interval=30)
plt.show()

效果图:
这里写图片描述

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值