• 3)、最后,把电量输送给电池,而整个降压的过程中会产生热能。

分类

  • 1)、高压低电流快充方案:在充电过程中提升充电电压(7-20V)来提升充电功率。

  • 2)、低压大电流快充方案:在电压一定情况下,增加电流,通常使用并联电路的方式进行分流。

  • 3)、铝-石墨烯超级电池

  • 超高耐用性和安全性,快充充电1.1秒就能充满电。

  • 实验阶段。

3、寿命


通常使用充电循环次数衡量。

4、安全性


严格控制电池容量,例如 VOOC 就使用了各种安全检测技术。

5、电量和硬件


  • 手机耗电是通过使用相应的硬件模块来消耗电能。

  • CPU、屏幕、WIFI、数据网络、GPS、音视频通话在日常耗电量中占比最大。

6、Android 耗电演进


KITKAT

批处理传感器

分批有效地收集和传递传感器事件。

Alarm 对齐

批处理在合理的相似时间内的所有应用的闹铃,以便系统仅唤醒一次。

Lollipop

  • 开启 Volta 项目

  • Job Scheduler

  • dumpsys batterystats

  • Battery Historian

  • 修复 native fork 进程保活的 bug

Marshmallow

  • 省电功能

  • Doze 低功耗模式

  • App Standby 应用待机摸手机

Nougat

  • 优化省电功能

  • Doze 加强版

  • implicit broadcasts 显示

  • 混合编译

Oreo

  • 更多优化省电功能

  • 后台执行限制

  • 后台位置限制

P(电压管理严格限制)

应用待机分组(App Standby Bueckets)

  • 从应用安装开始。

  • 分组决定后台被限制的程度。

  • 不常用的应用将被限制地更加严格。

应用后台限制(Background Restrictions)

  • 用户开启。

  • 停止后台运行。

  • 提示用户后台耗电严重的应用,用户可选择停止它们的后台运行。

省电模式(Battery Saver)

  • 用户开启。

  • 所有应用进入待机模式。

  • 更加严格的后台限制,而且无视应用的 Target API。

三、电量检测方案

=================================================================

对于电量的统计有一个公式,如下所示:

模块电量(mAh) = 模块电流(mA)* 模块耗时(h)

Android 系统要求 ROM 厂商必须在 /frameworks/base/core/res/res/xml/power_profile.xml 提供组件的电源配置文件。而 Android 系统的电量计算 PowerProfile 正是通过读取 power_profile.xml 的数据。

1、设置—耗电排行


  • 1)、直观,但没有详细数据,对解决问题帮助不大。

  • 2)、需要找特定场景专项测试,比如在某一个界面操作一段时间,然后来判断这个页面是否耗电。

2、使用广播监听电量变化—ACTION_BATTERY_CHANGED


获取电池电量、充电状态、电池状态等信息。

实战案例

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_BATTERY_CHANGED);

Intent intent = registerReceiver(null, filter);

LogUtils.i("battery " + intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1));

缺点

  • 1)、价值不大:针对手机整体的耗电量,而非单个 App。

  • 2)、实时性差、精度较低,被动通知。

3、dumpsys batterystats


batterystats 是 Android 5.0 提供的工具,它可以获取各个 App 的 WakeLock、CPU 时间占用等信息,同时增加了一个 Estimated power use(mAh)功能,预估耗电量。

作用

将电量测量转化为功能模块的使用时间或者次数。

adb shell dumpsys batterystats > battery.txt

在 battery.txt 搜索 ‘Estimated power use’ 关键字,下面粗略统计了各个 Uid 的总耗电量。

Estimated power use (mAh):

Capacity: 3350, Computed drain: 2767, actual drain: 3752-3853

Uid 1000: 1014 ( cpu=999 wake=1.36 radio=11.4 wifi=1.24 gps=0.435 sensor=0.808 ) Excluded from smearing

Unaccounted: 985 ( ) Including smearing: 0 ( ) Excluded from smearing

Uid 0: 416 ( cpu=157 wake=210 radio=38.8 wifi=9.51 ) Excluded from smearing

batterystats 所记录的电量统计数据源自于 BatteryStatsService-电量统计服务,其实现类为 BatteryStatsImpl,内部正是使用的 PowerProfile 。

BatteryStatsImpl 为每一个应用创建与之对应的 UID 来监控器系统资源的使用情况,其统计了 12 大模块的电量消耗,如下所示:

  • Camera、Audio、Video

  • Bluetooth、Network、Wakelock

  • Sensor、Radio、Screen

  • WIFI、CPU、GPS

4、Battery Historian


特点

  • 1)、查看自设备上次充电以来各种汇总统计信息,而且可以选择对应的 App 查看详细信息。

  • 2)、可视化展示指标:

  • 耗电比例。

  • 执行时间、次数。

  • 3)、仅适合线下使用。

安装

  • 1)、安装 Docker

  • 2)、docker – run -p:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999 (需要翻墙)

导出电量信息

  • 1)、使用 batterystats 命令重置手机电量:adb shell dumpsys batterystats --reset

  • 2)、使用 batterystats 命令获取电池数据权限并开启记录全面的电量信息:adb shell dumpsys batterystats --enable full-wake-history

  • 3)、测试完成后,使用 bugreport 导出电量信息:

  • 7.0和7.0以后:adb bugreport bugreport.zip

  • 6.0和6.0之前:adb bugreport > bugreport.txt

  • 通过 historian 图形化展示结果:python historian.py -a bugreport.txt > battery.html

上传分析

  • 1)、打开 http://localhost:

如果打不开,可以使用备用网站 https://bathist.ef.lc/

  • 2)、上传 bugreport 文件,点 Submit 提交即可。

Battery Historian 数据分析

Hitorian V2 — 电量统计图表

Add Metrics

![](https://img-blog.csdn

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

img.cn/img_convert/08cae2f8ea15e60a693875b47a2560fe.png)

在 Add Metrics 中我们可以增加更多的测量项。

CPU running

如果一直处于 running,则表明电量消耗比较高。

JobScheduler

选中 Job Scheduler 的某一个工作时间片,我们可以查看具体的 发生的时间、耗时以及次数,最重要的是它统计出来了是哪一个进程在使用这个 JobScheduler。

App Selection

  • 1)、选择要分析电量的指定 App。

  • 2)、点击右边区域的 System Stats 一栏可以在下方查看各个系统组件的电量百分比消耗详情,例如 Userspace Wakelocks。

主入口处的 Switch to Bugreport Comparison

选择多个文件进行上传对比。

5、电量专项测试


1)、耗电场景测试

  • 复杂计算。

  • 音视频播放。

2)、传感器相关

  • 使用时长

  • 耗电量

  • 发热

3)、后台静默测试

四、耗电优化

===============================================================

1、耗电优化的难点


  • 1)、「缺乏现场,无法复现」

  • 2)、「信息不全,难以定位」

  • 3)、「无法评估结果」

在 App 开发中,经常会由于某个需求场景或 代码 bug 而导致大量耗电。

2、后台调度任务省电


思考步骤

  • 需要后台运行

  • 长时间下载:DownloadManager

  • 数据同步:SyncAdapter

  • 本地任务:JobScheduler

  • 特定时间执行:AlarmManager

  • 实时通信:推送服务

  • 立刻执行:Foreground Service

对于耗电优化中,我们最常用的就是 JobScheduler,下面

你是否了解APP耗电问题?深入探索 Android 电量优化,flutter插件推荐相关推荐

  1. 你是否了解APP耗电问题?深入探索 Android 电量优化,醍醐灌顶

    batterystats 所记录的电量统计数据源自于 BatteryStatsService-电量统计服务,其实现类为 BatteryStatsImpl,内部正是使用的 PowerProfile . ...

  2. 深入探索Android布局优化(上)

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心 ...

  3. 深入探索Android稳定性优化

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 众所周知,移动开发已经来到了后半场,为了能够在众多开发者中脱颖而出,我们需要对某一个领域有深 ...

  4. 深入探索Android启动速度优化

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 在性能优化的整个知识体系中,最重要的就是稳定性优化,在上一篇文章 <深入探索Andro ...

  5. 深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析

    本文首发我的微信公众号:徐公,想成为一名优秀的 Android 开发者,需要一份完备的 知识体系,在这里,让我们一起成长,变得更好~. 前言 前一阵子,写了几篇 Android 启动优化的文章,主要是 ...

  6. 深入探索Android内存优化

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是Android内存优化的进阶篇,难度会比较大,建议对内存优化不是非常熟悉的前仔细看看在 ...

  7. 深入探索Android内存优化(炼狱级别)

    本文由 jsonchao投稿 微信:bcce5360 前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是 Android 内存优化的进阶 ...

  8. 深入探索 Android 内存优化(炼狱级别)

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是 Android 内存优化的进阶篇,难度可以说达到了炼狱级别,建议对内存优化不是非常熟 ...

  9. 探索 Android 多线程优化方法

    前言 1. 基本介绍 在我学习 Android 多线程优化方法的过程中,发现我对多线程优化的了解太片面. 写这篇文章的目的是完善我对 Android 多线程优化方法的认识,分享这篇文章的目的是希望大家 ...

最新文章

  1. 费曼学习法与孔子温故知新学习法为两大重要学习法,前者外向表现,后者内省提升
  2. Day14 自己定义泛型类的使用
  3. win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...
  4. Linux ALSA 图解
  5. 计算机网络之应用层:1、概述
  6. 【免费毕设】基于PHP的产品报价系统的设计与开发(源代码+论文)
  7. java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异
  8. 这一小点程序员务实的调整,可以避免整个开发团队的崩溃
  9. 第一次开卡SSD硬盘成功,主控为SM2258XT(附软件)
  10. 群晖系统如何布置php_群晖系统上如何切换PHP版本
  11. 单片机(STM32)内部RC振荡器误差时间到底有多少
  12. 网络存储学习之网络存储技术的发展现状及趋势
  13. 全桥驱动IR系列参考设计及问题指南
  14. ajax的三种传参方式
  15. ACM-ICPC 2018 沈阳赛区网络预赛 F题 Fantastic Graph
  16. html5最新滚动效果,jQuery和CSS3炫酷滚动页面内容元素动画特效插件
  17. 计算机操作系统 - 内存管理
  18. NXP i.MX 8M Mini核心板(4核 ARM Cortex-A53)规格软硬件说明资料
  19. 大破才能大立?数字化转型助你说不!影子、柔性组织的决策与效率提升
  20. 病毒分析系列 _ 病毒分析环境搭建

热门文章

  1. **Mybatis怎么自动生成Mapper文件和实体类**
  2. Redis的RDB与AOF持久化机制
  3. Java集合框架中隐藏的设计套路
  4. 如何写好一篇优质的网站内容
  5. team viewer如何解绑设备
  6. 微信小程序自定义组件使用阿里矢量图标库图标
  7. 令人敬畏的泰格伍兹 万维钢_令人敬畏的桌面壁纸:Windows 7版
  8. Chrome 插件推荐
  9. 计算机领域新技术的工作原理,七年级信息技术上册 第4课《计算机系统及其工作原理》教学案 新人教版...
  10. 美丽小猪Java基础笔记02【小美女程序猿诞生日记 之 java学习笔记】