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

功耗电流和耗电量的获取

1. 实验室环境:

在受控的实验条件下,我们使用 PowerMonitor 精确控制变量(如固定设备型号和系统版本、清理后台应用、设置恒定的亮度与音量、确保稳定的网络连接等),以获取高精度的电流测量数据,从而准确评估整机场景的功耗表现。适合在开发阶段进行精确的功耗测试和优化,但无法完全覆盖真实用户的使用场景。

0

2. 真实用户环境:

在实际使用场景中,我们基于库仑计来评估整机的场景功耗。具体来说,在 Android 系统中,/sys/class/power_supply/battery/charge_counter 文件通常用于记录电池的剩余容量,单位为微安时(µAh)。该值与 Android 提供的 BatteryManager API 中的 BATTERY_PROPERTY_ENERGY_COUNTER 属性直接对应,能够实时反映电池容量的变化,帮助我们评估整机在实际使用中的功耗情况。能够反映真实用户的功耗表现,但数据受环境干扰较大,精度和可控性较低,实际功耗大数据建设时,会根据不同场景进行定制采样时长和场景,确保数据的相对准确性。两者结合使用,可以更全面地评估功耗表现。

2.1 电流型电量计:也叫库仑计

目前手机上采用的电量计主要为电流型电量计,也称为库仑计。其工作原理如下:在电池的充电或放电路径上串联一个检测电阻,通过 ADC(模数转换器) 测量该电阻两端的电压,并将其转换为电池的实时充电或放电电流值。随后,实时计数器(RTC) 对这一电流值进行时间积分,从而计算出流过的电荷量(单位为库仑)。通过这种方式,库仑计能够精确追踪电池的充放电状态,实现电量监测。

0

2.2 软件接口实现

2.2.1 使用 Android BatteryManager API

Android 提供了 BatteryManager 类,通过其接口可以直接获取电池的统计信息。以下是示例代码:

import android.os.BatteryManager;import android.content.Context;// 获取 BatteryManager 实例BatteryManager mBatteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE);// 获取剩余能量(单位为纳瓦时,nWh)long energy = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);Slog.i(TAG, "Remaining energy = " + energy + " nWh");// 获取剩余电池容量(单位为微安时,µAh)long chargeCounter = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);Slog.i(TAG, "Remaining capacity = " + chargeCounter + " µAh");// 获取瞬时电池电流(单位为微安,µA)long currentNow = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);Slog.i(TAG, "Instant current = " + currentNow + " µA");// 获取平均电池电流(单位为微安,µA)long currentAvg = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);Slog.i(TAG, "Average current = " + currentAvg + " µA");// 获取剩余电池容量百分比(整数百分比)int capacity = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);Slog.i(TAG, "Remaining capacity = " + capacity + "%");

2.2.2 读取文件节点

通过访问 Linux 文件系统中的电池信息节点,直接读取电池相关数据。以下是示例代码:​​​​​​​

/** * 获取电池剩余容量(单位为微安时,µAh) */private static final String BATTERY_CAPACITY_PATH        = "/sys/class/power_supply/battery/charge_counter";public static int getBatteryCapacity() {    return getBatteryFileNode(BATTERY_CAPACITY_PATH) / 1000; // 转换为毫安时(mAh)}/** * 读取文件节点值 */private static int getBatteryFileNode(String path) {    try (BufferedReader reader = new BufferedReader(new FileReader(path))) {        String line = reader.readLine();        return Integer.parseInt(line.trim());    } catch (IOException | NumberFormatException e) {        e.printStackTrace();        return -1; // 错误时返回 -1    }}

相关文章:

  • 大数据 spark hive 总结
  • react(一):特点-基本使用-JSX语法
  • 【大模型(LLMs)RAG 检索增强生成 面经】
  • 【HTML】二、列表、表格
  • 【JAVA】七、基础知识“if+switch+循环结构”详细讲解~简单易懂!
  • Trae:与AI结伴,开启编程新体验
  • springboot438-基于SpringBoot的数字化教学资源管理系统(源码+数据库+纯前后端分离+部署讲解等)
  • 王者荣耀道具页面爬虫(json格式数据)
  • 线程、多线程以及线程池的关系与用法
  • Xinference大模型配置介绍并通过git-lfs、hf-mirror安装
  • 【使用 Java 调用命令行工具:完整指南】
  • Vue 3 Diff 算法深度解析:与 Vue 2 双端比对对比
  • 【机器学习】基于t-SNE的MNIST数据集可视化探索
  • 【Vue3+Vite指南】全局引入SCSS文件后出现Undefined mixin?一招解决命名空间陷阱!
  • 高频面试题(含笔试高频算法整理)基本总结回顾27
  • 模型蒸馏系列——开源项目
  • 小测验——根据已有obj文件,自己写出网格投影至2d
  • 【Pycharm】Pycharm无法复制粘贴,提示系统剪贴板不可用
  • 二叉树的性质和实现
  • 【新能源汽车研发测试能力建设深度解析:设备、趋势与行业展望】
  • 财政部农业农村司司长吴奇修接受纪律审查和监察调查
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园
  • 加拿大温哥华一车辆冲撞人群,造成多人伤亡
  • 哈马斯同意释放剩余所有以方被扣押人员,以换取停火五年