CPU占用
cpu使用率原理
android系统内核是基于linux,在linux系统下cpu利用率分别为:用户态、系统态、空闲态
用户态:cpu处于用户态执行的时间
系统态:系统内核执行的时间
空闲态:空闲系统进程执行的时间
CPU利用率:CPU执行非系统空闲进程的时间/CPU总的执行时间
cpu测试方法
adb 命令
C:\Users\Administrator>adb shell top --help usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,] Show process activity in real time. -H Show threads -k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID) -o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE) -O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default) -s Sort by field number (1-X, default 9) -b Batch mode (no tty) -d Delay SECONDS between each cycle (default 3) -m Maximum number of tasks to show -n Exit after NUMBER iterations -p Show these PIDs -u Show these USERs -q Quiet (no header lines) Cursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force update, R to reverse sort, Q to exit.
adb shell top -n 2 -d 1 -s 9 | findstr package
import csv,os,time class Monitoring(object): def __init__(self,count,pkg): self.counter = count self.pkg = pkg self.cpudata=[('timestamp','cpustatus')] self.memdata=[('timestamp','memstatus')] def getCurrentTime(self): currentTime=time.strftime("%H:%M:%S",time.localtime()) return currentTime def getCurrentDate(self): datetime = time.strftime("%Y-%m-%d %H_%M_%S") return datetime def monitoring_cpu(self): result = os.popen("adb shell top -n 2 -d 1 -s 9 | findstr " +self.pkg) res = result.readline().split(" ") print(res) if res == [""]: print("no data!!!") else: cpuvalue = list(filter(None,res))[8] print(cpuvalue) currenttime = self.getCurrentTime() print("current time is:",currenttime) print("cpu data is",cpuvalue) self.cpudata.append([currenttime,cpuvalue]) print(self.cpudata) def get_cpu_datas(self): while self.counter > 0: self.monitoring_cpu() self.counter=self.counter-1 time.sleep(1) def saveDataToCsv(self,data_type): now = self.getCurrentDate() if data_type == "cpu": csvfile=open('./cpustatus_' +now+ '.csv','w',encoding="utf-8",newline='') write = csv.writer(csvfile) write.writerows(self.cpudata) csvfile.close() elif data_type == "mem": csvfile = open('./memstatus_' +now+ '.csv', 'w', encoding="utf-8", newline='') write = csv.writer(csvfile) write.writerows(self.memdata) csvfile.close() else: print('data_type error!') if __name__ == "__main__": m = Monitoring(20,"com.youku.phone") m.get_cpu_datas() m.saveDataToCsv("cpu")