前面写了实时获取Android手机的CPU频率,这个只需要读取/sys/devices/system/cpu/cpu0/cpufreq下的文件即可。但是如果想获取CPU的占用率,就不是这么简单了。因为手机上并没有存储CPU占用率的文件,我们需要通过已有的数据计算得到CPU占用率。

在/proc/stat文件里存储的数据,是从系统启动开始累计到当前时刻CPU活动的信息。读取该文件信息如下:

通过获取cpu一行的数据,即可进行CPU占用率的计算。我们会用到的数据有:
- user(21441),从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含nice值为负的进程。
- nice(3634),从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。
- system(13602),从系统启动开始累计到当前时刻,处于核心态的运行时间。
- idle(818350),从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间。
- iowait(3535),从系统启动开始累计到当前时刻,IO等待时间。
- irq(2),从系统启动开始累计到当前时刻,硬中断时间。
- softirq(99),从系统启动开始累计到当前时刻,软中断时间。

总的CPU时间totalTime = user+nice+system+idle+iowait+irq+softirq

总的CPU占用率的计算方法为:采样两个足够短的时间间隔的CPU快照,CPU占用率 = 100*((totalTime2-totalTime1)-(idle2-idle1))/(totalTime2-totalTime1)
其中totalTime2-totalTime1为采样时间间隔内所有的CPU时间片,idle2-idle1为空闲时间片,CPU执行非系统空闲进程的时间/CPU总的执行时间,即得到CPU的占用率。

具体算法实现如下:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/*** Created by yt on 2016/11/15.*/public class getRate {public static float getRate(){Map<String,String> map1 = getMap();//采样第一次CPU信息快照long totalTime1 = Long.parseLong(map1.get("user")) + Long.parseLong(map1.get("nice"))+ Long.parseLong(map1.get("system")) + Long.parseLong(map1.get("idle"))+ Long.parseLong(map1.get("iowait")) + Long.parseLong(map1.get("irq"))+ Long.parseLong(map1.get("softirq"));//获取totalTime1long idleTime1 = Long.parseLong(map1.get("idle"));//获取idleTime1try{Thread.sleep(360);//等待360ms}catch (Exception e){e.printStackTrace();}Map<String,String> map2 = getMap();//采样第二次CPU快照long totalTime2 = Long.parseLong(map2.get("user")) + Long.parseLong(map2.get("nice"))+ Long.parseLong(map2.get("system")) + Long.parseLong(map2.get("idle"))+ Long.parseLong(map2.get("iowait")) + Long.parseLong(map2.get("irq"))+ Long.parseLong(map2.get("softirq"));//获取totalTime2long idleTime2 = Long.parseLong(map2.get("idle"));//获取idleTime2float cpuRate = 100*((totalTime2-totalTime1)-(idleTime2-idleTime1))/(totalTime2-totalTime1);return cpuRate;}//采样CPU信息快照的函数,返回Map类型public static Map<String,String> getMap(){String[] cpuInfos = null;try {BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("/proc/stat")));//读取CPU信息文件String load = br.readLine();br.close();cpuInfos = load.split(" ");}catch (IOException e){e.printStackTrace();}Map<String,String> map = new HashMap<String,String>();map.put("user",cpuInfos[2]);map.put("nice",cpuInfos[3]);map.put("system",cpuInfos[4]);map.put("idle",cpuInfos[5]);map.put("iowait",cpuInfos[6]);map.put("irq",cpuInfos[7]);map.put("softirq",cpuInfos[8]);return map;}
}

结合前面文章中的定时获取逻辑,即可实现定时获取Android手机CPU占用率。效果如图(为了验证正确性,我对cpuInfos和idleTime做了输出):

实时获取Android手机CPU占用率相关推荐

  1. 实时获取Android手机CPU频率

    Android手机的CPU的频率信息被保存在 /sys/devices/system/cpu/cpu0/cpufreq 目录下,通过shell命令查看该目录下的文件,如下图 其中cpuinfo_cur ...

  2. 关于android 进程CPU占用率高的原因分析

    *记录开发中的问题,方便以后自已回忆,2017-07-17 记录 在开发一个语音的线程中,发现有如下事情,系统越来越慢,也越来越卡,打到 adb shell 输 入 top 查看系统资源,发现 CPU ...

  3. 获取Android手机CPU类型 ARM、ARMV7、NEON

    1 查看手机CPU信息 cmd--adb shell--cd /proc------cat cpuinfo 2 获取cpu的是arm指令集,armv7指令集.还是neon指令集 /*** * [获取c ...

  4. 性能测试——CPU占用率的计算原理

    cpu 关于性能测试中cpu数据抛出以下4个问题? 1.CPU的占比是什么含义,是怎么计算的? 2.为什么在日常性能测试中开发最认可的数据是cycle数(windows性能测试报告中的产出数据之一), ...

  5. 深度解读鸿蒙轻内核CPU占用率

    摘要:CPUP(Central Processing Unit Percentage,CPU占用率)分为系统CPU占用率和任务CPU占用率.用户通过系统级的CPU占用率,判断当前系统负载是否超出设计规 ...

  6. WIN10 API打印CPU占用率

    环境:win10+VS2017 网上找了几个demo发现CPU占用率不准确,跟任务管理器不一样.最后参考github项目GitHub - zhongyang219/TrafficMonitor: 这是 ...

  7. ios android cpu占用率,20家农村商业银行个人手机APP评测:CPU占用率差距最大可达32倍,流量消耗成重灾区...

    文|中国电子银行网 陈璐溦 为持续跟踪和检测手机银行APP的兼容性和易用性等方面的表现,为行业发展提供有益参考,中国电子银行网联合CFCA兼容和性能测试平台对20家农村商业银行客户端进行测试.今年测试 ...

  8. 银行手机APP软件做性能测试吗,20家农村商业银行个人手机APP评测:CPU占用率差距最大可达32倍 流量消耗成重灾区...

    为持续跟踪和检测手机银行APP的兼容性和易用性等方面的表现,为行业发展提供有益参考,中国电子银行网联合CFCA兼容和性能测试平台对20家农村商业银行客户端进行测试.今年测试范围首次加入IOS系统,与安 ...

  9. linux c 获取进程 cpu占用率 内存占用情况

    实例如下: #include <stdio.h> #include <unistd.h> #include <sys/time.h> #include <st ...

  10. 获取进程CPU占用率

    获取进程CPU占用率 // 时间转换 static __int64 file_time_2_utc(const FILETIME* ftime) {LARGE_INTEGER li;li.LowPar ...

最新文章

  1. centos 更换java版本_centos7 更换jdk版本
  2. 以下选项不是python打开方式的是-以下选项,不是Python保留字的选项是:_学小易找答案...
  3. JavaScript Set Homepage and Favorite
  4. Android Activity的理解
  5. 八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题
  6. SQL注入到EXP编写
  7. 工作中男女程序员对比,没注意原来差距这么大!你中招了吗?
  8. .NET Core调用WCF的最佳实践
  9. 编写一个函数,该函数能判断一个英文句子str(带空格)中是否含有某个单词w,如“How old are you?”含有“old”。在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那
  10. python 反射实体,动态应用
  11. 信息学奥赛一本通C++语言——1109:开关灯
  12. 用matlab开发软件开发,Matlab软件应用与开发new
  13. 极简算法 —— 判断两字符串是否为相同字母的不同顺序组成
  14. 小程序wafer2操作数据库
  15. 嵌入式系统设计师教程笔记
  16. [Matlab] 二进制蝙蝠算法用于解决背包问题
  17. python爬虫爬取网站视频_python3爬虫爬取视频(一)
  18. matlab圆锥曲线,Matlab软件在高中数学圆锥曲线学习过程中应用.doc
  19. facebook登陆ios
  20. 如何使用百度统计监测网站流量

热门文章

  1. 原来,嵌入式BI方案的核心差异在这,教你如何评估
  2. 简述自动化测试实习收获
  3. HDU 3221 Brute-force Algorithm(指数降幂公式)
  4. WebRTC实时通信系列教程7 使用Socket.IO搭建信令服务器交换信息
  5. Largest Rectangle in a Histogram 题解 Python
  6. 用python读取tif格式图像
  7. 机器学习 | 台大林轩田机器学习基石课程笔记5 --- Training versus Testing
  8. gateway跨域问题解决方法
  9. C语言:输入一堆字符统计不同字符的数量
  10. python requests 爬取代理ip并验证(快代理西祠代理)