当前位置: 首页 > news >正文

Android 中获取当前 CPU 频率和占用率

最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:

目前没有标准的 API 来获取 CPU 的使用频率,只能通过读取指定 CPU 文件获取当前 CPU 频率,在某些机器或者特定版本中,可能需要ROOT 权限或者特殊权限,因此会存在一定几率的失败,因此需要做好 Try…catch 动作。又因为现在手机 CPU 的多核数目,因此我们可能需要获取多个 CPU 频率数,并取平均值。

获取系统 CPU 核心数:

 val cpuCoreNum = Runtime.getRuntime().availableProcessors()

获取指定 CPU 当前频率:

/sys/devices/system/cpu/cpu${index}/cpufreq/scaling_cur_freq

那么核心代码为:

private fun getAllCpuCoreFrequency() : Long {var frequency = 0Lfor (index in 0 until  cpuCoreNum){frequency += readFile("/sys/devices/system/cpu/cpu$index/cpufreq/scaling_cur_freq")}BLog.d("frequency : $frequency")return frequency / cpuCoreNum}private fun readFile(filePath: String): Long{try {val file = RandomAccessFile(filePath, "r")val content = file.readLine()file.close()if (TextUtils.isEmpty(content)){return 0L}BLog.d("readFile content : $content")return content.trim().toLong()}catch (e : Exception){e.printStackTrace()return 0L}}

如果需要获取 CPU 的占用率,那么就需要知道每个核心的最大频率和最小频率,同样是通过文件获取:

//max frequency file
/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_max_freq//min frequency file
/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_min_freq

那么核心代码为:

object CPUUtils {private var cpuCoreNum = 0private var cpuMaxFrequency = 0Lprivate var cpuMinFrequency = 0Lfun initCpuCoreNum(){if (cpuCoreNum <= 0 || cpuMaxFrequency <= 0L || cpuMinFrequency <= 0L){cpuCoreNum = Runtime.getRuntime().availableProcessors()initMaxAndMinFrequency()if (cpuCoreNum > 0 && cpuMaxFrequency > 0L && cpuMinFrequency > 0L){SpManager.getInstance().setCanUseCPUFrequency(true)}}BLog.d("cpuCoreNum : $cpuCoreNum")}private fun initMaxAndMinFrequency()  {if (cpuCoreNum <= 0){return}cpuMaxFrequency = 0LcpuMinFrequency = 0Lfor (index in 0 until cpuCoreNum){cpuMaxFrequency += readFile("/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_max_freq")cpuMinFrequency += readFile("/sys/devices/system/cpu/cpu${index}/cpufreq/cpuinfo_min_freq")}BLog.d("cpuMaxFrequency : $cpuMaxFrequency, cpuMinFrequency : $cpuMinFrequency")}private fun readFile(filePath: String): Long{try {val file = RandomAccessFile(filePath, "r")val content = file.readLine()file.close()if (TextUtils.isEmpty(content)){return 0L}BLog.d("readFile content : $content")return content.trim().toLong()}catch (e : Exception){ExceptionHandler.recordException(e)return 0L}}private fun getAllCpuCoreFrequency() : Long {initCpuCoreNum()if (cpuCoreNum <=0){return 0L}var frequency = 0Lfor (index in 0 until  cpuCoreNum){frequency += readFile("/sys/devices/system/cpu/cpu$index/cpufreq/scaling_cur_freq")}BLog.d("frequency : $frequency")return frequency}fun findCurrentFrequencyPercent() : Long {val currentFrequency = getAllCpuCoreFrequency()BLog.d("currentFrequency : $currentFrequency, cpuMinFrequency : $cpuMinFrequency, cpuMaxFrequency : $cpuMaxFrequency")if (cpuMaxFrequency - cpuMinFrequency <= 0L || currentFrequency - cpuMinFrequency < 0L || cpuMaxFrequency - currentFrequency < 0L){return 0L}return (currentFrequency - cpuMinFrequency) * 100 / (cpuMaxFrequency - cpuMinFrequency)}fun getCpuCoreFrequency() : Long {initCpuCoreNum()if (cpuCoreNum <=0){return 0L}return getAllCpuCoreFrequency() / cpuCoreNum}}

获取 CPU 频率:

CPUUtils.getCpuCoreFrequency()

获取 CPU 占用率:

CPUtils.findCurrentFrequencyPercent()

相关文章:

Android 中获取当前 CPU 频率和占用率

最近在优化 App 的性能&#xff0c;需要获取当前 CPU视频频率和占用率&#xff0c;通过查询资料&#xff0c;大致思路如下&#xff1a; 目前没有标准的 API 来获取 CPU 的使用频率&#xff0c;只能通过读取指定 CPU 文件获取当前 CPU 频率&#xff0c;在某些机器或者特定版本中…...

pymobiledevice3使用介绍(安装、常用命令、访问iOS沙盒目录)

项目地址&#xff1a;https://github.com/doronz88/pymobiledevice3 首先先介绍一下pymobiledevice3&#xff0c; pymobiledevice3是用Python3 实现的&#xff0c;用于处理 iDevices&#xff08;iPhone 等&#xff09;。它可以跨平台使用&#xff0c;支持&#xff1a;windows…...

python 爬虫模拟登录

在使用 Python 编写爬虫时&#xff0c;模拟登录是一个非常常见的需求&#xff0c;尤其是当你需要爬取需要身份验证的数据时。模拟登录通常需要以下步骤&#xff1a; 分析登录页面&#xff1a;确定提交登录请求的 URL 和相关参数。发送登录请求&#xff1a;模拟用户发送登录表单…...

AOP基础、快速入门、进阶

一、概述 AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程 那什么又是面向方法编程呢&#xff0c;为什么又需要面向方法编程呢&#xff1f;来我们举个例子做一个说明&#xff1a; 比如…...

哪款宠物空净运行吸毛好、噪音小?希喂、霍尼韦尔、安德迈测评!

作为宠物领域目前最火热的产品&#xff0c;宠物空气净化器的讨论度一直很高。身为铲屎官的我在产品刚出的时候就购入了一台&#xff0c;结果让我非常失望&#xff01; 抛开产品效果不提&#xff0c;它运行起来的声音实在太大了&#xff01;我家猫根本不愿意靠近&#xff0c;每…...

新兴的安全职业挑战

我们经常与安全专业人士交谈&#xff0c;他们希望在努力提升职业发展的同时提高自己的价值并克服组织内部的挑战。在这些谈话中&#xff0c;花费大量时间讨论公司未来将面临的安全问题并不罕见。 安全领导者希望为问题制定计划并获得领导层对其计划的支持。这通常意味着实施修…...

代码随想录算法训练营Day32 | 122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和

目录 122.买卖股票的最佳时机Ⅱ 55.跳跃游戏 45.跳跃游戏Ⅱ 1005.K次取反后最大化的数组和 122.买卖股票的最佳时机Ⅱ 题目 122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i…...

3D Slicer 教程一

先了解一下什么是3D Slicer,这个是做什么,然后一步步了解功能,一起看看源码 一.初识 这块软件用来处理医学影像,是一款开源的软件. 里面涉及到一些 2d 常见的操作,图像处理,调窗,测量; 涉及到3d的一些常见重建,mpr,vr,cpr等, 还包括一些分割,变换等(越高级精确的一些通过插件…...

github pages + hugo 搭建静态博客网站

体验地址 1. 起因&#xff0c; 目的: 其实6年前&#xff0c;我就写过这个。 项目代码 博客地址 最近想改写一下。 github 推荐的主题是 Jekyll&#xff0c; 我当时用的就是这个&#xff0c;感觉很麻烦。尤其是文章命名。 新的主题 hugo 用起来还行。 2.过程: 过程记录&am…...

Python爬虫如何爬取并解析JSON数据

前言 Python爬虫是一种用于从互联网上获取数据的程序&#xff0c;而JSON&#xff08;JavaScript Object Notation&#xff09;是一种常用的数据交换格式。本文将介绍如何使用Python爬虫来爬取并解析JSON数据&#xff0c;同时还会讲解如何使用代理IP来提高爬取效率。 1. 什么是…...

【C++】精妙的哈希算法

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 一、哈希结构1、哈希概念2、哈希函数3、哈希冲突3.1 闭散列3.2 开散列 4、完整代码 一、哈希结构 1、哈希概念 A…...

智慧链动青春:国家区块链中心接待北京市十一学校青少年访学探索

以生动科学的方法点燃青少年科学探索欲望是构建未来科技人才梯队的基石。近期国家区块链技术创新中心接待北京市十一学校新生访学&#xff0c;以科普讲座、实操互动的方式让学生在深度思考中感受科学魅力、接触前沿科技&#xff0c;激发学生对区块链、隐私计算和芯片设计制造的…...

利用C++封装鼠标轨迹算法为DLL:游戏行为检测的利器

在现代软件开发中&#xff0c;鼠标轨迹模拟技术因其在自动化测试、游戏脚本编写等领域的广泛应用而备受青睐。本文将介绍如何使用C语言将鼠标轨迹算法封装为DLL&#xff08;动态链接库&#xff09;&#xff0c;以便在多种编程环境中实现高效调用&#xff0c;同时探讨其在游戏行…...

Qt- QSS风格选择器常用属性选择器样式表盒子

1. 风格设置 Qt 提供了 3 种整体风格&#xff0c;使用 QStyleFactory::keys() 来获取 &#xff08;windowsvista 、Windows 、Fusion&#xff09; 可以在 main.cpp 中调用 setStyle 方法对应用程序进行全局风格的设置 int main(int argc, char *argv[]) {QApplication a(arg…...

粤智助自助一体机大厂浮出水面 OBOO鸥柏已成服务终端中坚力量

自助服务查询一体机作为操作自主化便民的重要窗口&#xff0c;OBOO鸥柏自助服务终端机以其显著的技术优化&#xff0c;通过触摸屏或其他交互界面&#xff0c;使用户能够自助服务完成各种操作&#xff0c;如支付、查询信息终端、办理业务&#xff0c;自助查档答应一体化等。为交…...

SpringBoot-application.properties配置

默认配置最终都是映射/关联到某个类 &#xff03;SPRING CONFIG&#xff08;ConfigFileApplicationListener&#xff09; spring.config.name &#xff03;配置文件名&#xff08;默认 为 application &#xff09; spring.config.location &#xff03;配置文件的位置 …...

STM32-ADC模数转换

一、概述 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间输入电压范围&#xff1a;0~3.3V&#xff…...

lspci | grep VGA

执行lspci | grep VGA后如下&#xff0c;解释含义 00:0f.0 VGA compatible controller: VMware SVGA II Adapter 0b:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070] (rev a1) 执行 lspci | grep VGA 命令后&#xff0c;您得到了两条输出&#…...

智慧厂区车辆导航解决方案;智慧工厂电子地图应用解决方案;大型工厂内部导航解决方案;智慧工厂可视化地图应用方案

智慧厂区车辆导航解决方案&#xff1b;智慧工厂电子地图应用解决方案 在智慧工业的蓬勃发展背景下&#xff0c;上海懒图科技凭借其室内电子地图技术的深厚积淀&#xff0c;正为智慧工厂物流管理领域注入革新力量。其创新的车辆导航与可视化管理系统&#xff0c;凭借高精度定位…...

决策树C4.5算法详解及实现

C4.5决策树是一种广泛使用的机器学习算法&#xff0c;它用于分类任务。它是在ID3算法的基础上改进的&#xff0c;主要通过生成决策树来构建分类模型。C4.5通过以下步骤工作&#xff1a; 1. 数据集分裂 C4.5通过选择具有最高信息增益率的特征来分裂数据集。信息增益率&#xf…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...