你是否了解APP耗电问题?深入探索 Android 电量优化,flutter插件推荐
- 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插件推荐相关推荐
- 你是否了解APP耗电问题?深入探索 Android 电量优化,醍醐灌顶
batterystats 所记录的电量统计数据源自于 BatteryStatsService-电量统计服务,其实现类为 BatteryStatsImpl,内部正是使用的 PowerProfile . ...
- 深入探索Android布局优化(上)
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心 ...
- 深入探索Android稳定性优化
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 众所周知,移动开发已经来到了后半场,为了能够在众多开发者中脱颖而出,我们需要对某一个领域有深 ...
- 深入探索Android启动速度优化
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 在性能优化的整个知识体系中,最重要的就是稳定性优化,在上一篇文章 <深入探索Andro ...
- 深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析
本文首发我的微信公众号:徐公,想成为一名优秀的 Android 开发者,需要一份完备的 知识体系,在这里,让我们一起成长,变得更好~. 前言 前一阵子,写了几篇 Android 启动优化的文章,主要是 ...
- 深入探索Android内存优化
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是Android内存优化的进阶篇,难度会比较大,建议对内存优化不是非常熟悉的前仔细看看在 ...
- 深入探索Android内存优化(炼狱级别)
本文由 jsonchao投稿 微信:bcce5360 前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是 Android 内存优化的进阶 ...
- 深入探索 Android 内存优化(炼狱级别)
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是 Android 内存优化的进阶篇,难度可以说达到了炼狱级别,建议对内存优化不是非常熟 ...
- 探索 Android 多线程优化方法
前言 1. 基本介绍 在我学习 Android 多线程优化方法的过程中,发现我对多线程优化的了解太片面. 写这篇文章的目的是完善我对 Android 多线程优化方法的认识,分享这篇文章的目的是希望大家 ...
最新文章
- 费曼学习法与孔子温故知新学习法为两大重要学习法,前者外向表现,后者内省提升
- Day14 自己定义泛型类的使用
- win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...
- Linux ALSA 图解
- 计算机网络之应用层:1、概述
- 【免费毕设】基于PHP的产品报价系统的设计与开发(源代码+论文)
- java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异
- 这一小点程序员务实的调整,可以避免整个开发团队的崩溃
- 第一次开卡SSD硬盘成功,主控为SM2258XT(附软件)
- 群晖系统如何布置php_群晖系统上如何切换PHP版本
- 单片机(STM32)内部RC振荡器误差时间到底有多少
- 网络存储学习之网络存储技术的发展现状及趋势
- 全桥驱动IR系列参考设计及问题指南
- ajax的三种传参方式
- ACM-ICPC 2018 沈阳赛区网络预赛 F题 Fantastic Graph
- html5最新滚动效果,jQuery和CSS3炫酷滚动页面内容元素动画特效插件
- 计算机操作系统 - 内存管理
- NXP i.MX 8M Mini核心板(4核 ARM Cortex-A53)规格软硬件说明资料
- 大破才能大立?数字化转型助你说不!影子、柔性组织的决策与效率提升
- 病毒分析系列 _ 病毒分析环境搭建
热门文章
- **Mybatis怎么自动生成Mapper文件和实体类**
- Redis的RDB与AOF持久化机制
- Java集合框架中隐藏的设计套路
- 如何写好一篇优质的网站内容
- team viewer如何解绑设备
- 微信小程序自定义组件使用阿里矢量图标库图标
- 令人敬畏的泰格伍兹 万维钢_令人敬畏的桌面壁纸:Windows 7版
- Chrome 插件推荐
- 计算机领域新技术的工作原理,七年级信息技术上册 第4课《计算机系统及其工作原理》教学案 新人教版...
- 美丽小猪Java基础笔记02【小美女程序猿诞生日记 之 java学习笔记】