在 Android 设备上以编程方式获取 CPU 时钟速度?

Posted

技术标签:

【中文标题】在 Android 设备上以编程方式获取 CPU 时钟速度?【英文标题】:Obtain CPU clock speed programmatically on Android Device? 【发布时间】:2021-12-19 21:19:46 【问题描述】:

有人有代码 sn-p 给出 android 设备上的 CPU 时钟速度吗?

原因

我编写了一个 Wear OS 应用程序,使用手表 GPS 计算速度和方位角到(预先输入的)GPS 位置。我遇到的问题是在某个随机时间段后 GPS 停止提供更新。

我在三星 Galaxy Watch 4 上运行该应用程序,假设可靠性问题与所报告的三星最新手表过热问题有关

一位同事建议我尝试使用 CPU 时钟速度来检测过热。他指出,许多现代移动设备在检测到温度过高时会降低其 CPU 时钟速度。

我希望使用 CPU 时钟作为过热的预警。然后我可以放慢 GPS 更新的速度,让应用程序保留减少的功能,这比完全失去 GPS 要好得多。

那么任何人都可以提供一个代码 sn-p 给出 Android 设备上的 CPU 时钟速度吗?

编辑#1

可以直接使用以下代码sn-p获取CPU的热状态

        val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
        val thermalState = powerManager.currentThermalStatus
        /* Values
            THERMAL_STATUS_NONE,
            THERMAL_STATUS_LIGHT,
            THERMAL_STATUS_MODERATE,
            THERMAL_STATUS_SEVERE,
            THERMAL_STATUS_CRITICAL,
            THERMAL_STATUS_EMERGENCY,
            THERMAL_STATUS_SHUTDOWN,
         */

编辑#2

目前的工作理论是这可能不是手表过热问题,而是单独的 Galaxy Watch 4“功能”。尽管将应用程序指定为独立应用程序,但 GPS 更新会在与手机的连接丢失时停止,如讨论 here

注意事项:

我查看了测量 GPS 计算的执行时间,但这取决于当前航向。这是因为在平均轴承时需要处理“包裹”,例如3度和359度的方位平均值是1度(不是181度!)

代码来自Small Kotlin demo ACCESS_FINE_LOCATION

【问题讨论】:

“我正在三星 Galaxy Watch 4 上运行该应用程序,并假设可靠性问题与三星最新手表报告的过热问题有关”——您是否尝试过测量温度,例如使用红外温度计,来证实你的理论? 因为这是***.com/questions/69735007/… 的一个分支,我怀疑还有其他问题。获取 GPS 更新对于各种 Wear 应用来说是一项非常常见的任务,而且它运行良好且不会过热。您需要监控 CPU 使用情况才能使 GPS 更新正常工作的想法肯定不是这样的。但是如果没有可重复的样本,就很难帮助您解决最初的问题。这是你应该关注的。 @CommonsWare 第一次发生时,手表明显比平时暖和。星期五晚上,应用程序运行了大约 45 分钟,然后应用程序报告没有 GPS,不久之后手表自动关闭,尽管只感觉比平时稍微暖和。昨天,该应用在使用 5 分钟后报告没有 GPS,并且没有比平时暖和 - 手表永远不会自行关闭。 @YuriSchimke 让我担心的是,我的 GPS 代码在物理设备上运行(一切都是不可靠的),但只会在模拟器上运行一次(第一次 - 然后即使应用程序已卸载)。当我在之前的帖子中添加代码时,问题立即被标记为 [已关闭] - 所以我完全不知道如何继续前进。 正如我之前评论的,在***上获得有效帮助的方法是提供示例代码,最好是github中的示例项目,其他人可以看到任何明显的东西。 【参考方案1】:

不是一个明确的答案,我不知道这些值的具体含义。

来自https://***.com/a/3789655/1542667

在三星手表上

wiseul:/ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq                                                                                                                                                   
200000
wiseul:/ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq                                                                                                                                                   
1200000
wiseul:/ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq                                                                                                                                                   
1200000

【讨论】:

Yuri 感谢您的回答 - 不幸的是,我没有找到建议的文件。很遗憾,因为监控 cur_freq 占 max_freq 的百分比正是我想要的。

以上是关于在 Android 设备上以编程方式获取 CPU 时钟速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一网络上以编程方式获取其他支持Wifi的设备的IP地址?

在 android 4.0 上以编程方式设置 *** 连接

在 Android 上以编程方式关闭应用程序的通知

在android上以编程方式打开/关闭大写锁定和shift键

如何在 Android TV 上以编程方式更改电视频道

Appium:如何在开始测试运行 appium-testng 之前使用 java 在 aws 设备场设备上以编程方式创建 google 帐户