前言

本文翻译自“为电池寿命做优化”系列文档中的其中一篇,用于介绍如何使用Battery Historian分析电源使用情况。

中国版官网原文地址为:https://developer.android.google.cn/topic/performance/power/battery-historian

路径为:Android Developers > Docs > 指南 > Best practies > Performance > Optimize for battery life > Analyze power use with Battery Historian

正文

Battery Historian工具可以深入了解随着时间的推移设备的电池消耗情况。在系统范围级别,该工具以HTML展示的方式视觉化了系统日志中与电源相关的事件。在具体的应用级别,该工具提供了多种数据,这些数据可以帮您识别耗尽电池的应用行为。

本文档描述了一些方法,通过这些方法您可以使用Battery Historian来学习电池消耗范例。本文档以解释怎样阅读Battery Historian报告的系统范围内的数据开始。然后,展示了一些方法,通过这些方法,您可以使用Battery Historian来诊断和排除您自己的应用中与电池消耗相关的行为。最后,提供了一些对Battery History可能特别有用的场景的提示。

使用系统范围的视图

Battery Historian工具提供了一种系统范围的可视化显示,它包含了各种应用和系统的行为,以及它们与随着时间推移电池消耗的关联。正如图1中所显示的,该视图可以帮您诊断和识别您应用的电源使用问题。

图1:Battery Historian关于系统范围内影响电源消耗事件的显示

图中令人尤为感兴趣的是这条黑色的、水平的、向下的代表电池等级的趋势线,它是在y轴上测量的。例如,在"Battery Level"行的最开始,大约上午6:50时,可视化图在电池线上显示了一个相对陡峭的下降。

图2提供了显示图中那部分的特写镜头。

图2:从大约6:50 AM到7:20 AM之间Battery Historian时间线的特写镜头

当电量急剧下降时,在电池等级线的最开始展示图显示了正在发生的三件事:CPU正在运行,应用获得了一个唤醒锁,以及屏幕亮了。在这种方式中,Battery Historian帮您了解到当电池消耗很高时发生了什么事件。然后,您可以瞄准您应用中的这些行为以及研究是否您可以进行一些相关的优化。

这个系统范围的可视化图也可以提供其它的线索。例如,如果它显示移动无线网频繁地关闭和开启,那么通过如JobScheduler或者Firebase Job Dispatcher等【智能调度API】可能有机会优化这些行为。

下一个部分解释了怎样针对您自己的应用研究行为和事件。

查看具体应用的数据

除了通过系统范围视图提供的宏观水平数据,Battery Historian也提供了表格和一些数据的可视化图,该可视化视图特别针对您设备上运行的每一个应用。这些表格化的数据包括:

  • 设备上应用的估计电源使用。
  • 网络信息。
  • 唤醒锁。
  • 服务。
  • 进程信息。

表格提供了关于您的应用的两个维度的数据。首先,你可以查找与其它应用相比,您的应用的电源使用排名在哪里。为了做这件事,在“Tables”下点击“Device Power Estimates”表格。这个表格检查了一个虚构的叫做“Pug Power”的应用。

图3:调查那些应用消耗了最多的电量。

图3中的表格揭示了“Pug Power”是设备上电量的第九大消费者,也是第三大非操作系统部分的应用。这个数据显示该应用应该进行更深入的研究。

为了查找指定应用的数据,输入它的包名到“App Selection”下方的两列下拉菜单的下层,它们位于可视化图的左边。

图4:输入想查看数据的指定应用

当您选择了一个指定的应用,如下的数据是可视化类型就变为显示指定应用的数据,而不是系统范围的数据:

  • SyncManager.
  • Foreground process
  • Userspace Wakelock
  • Top app
  • JobScheduler
  • Activity Manager Proc

如果您的应用执行同步和执行作业比需要的更频繁,“SyncManager”和“JobScheduler”可视化视图会立即使其变得很明显。通过这样做,它们可以快速地显示机会来为提升电池性能优化您应用的行为。

您也可以获得再多一块指定应用的可视化数据——“Userspace Wakelock”。为了在bug报告中包含这个信息,在您的终端窗口中输入如下命令:

$ adb shell dumpsys batterystats --enable full-wake-history
★ 注意:从Android6.0(API等级23)开始,平台包含了Doze功能,给应用实行了某些优化。例如,无论JobScheduler如何调度作业,Doze批量处理工作都会在短暂的维护窗口中进行。

图5和图6显示了“Pug Power”数据:图5显示了指定应用数据的可视化视图,图6显示了相应的表格数据。

图5:虚构应用“Pug Power”数据的可视化视图

图6:虚构应用“Pug Power”的表格化数据

可视化视图不会立即显示明显的内容。JobScheduler行显示应用没有任何工作调度。SyncManager行显示应用没有执行任何同步。

可是,表格数据中Wakelocks部分的检测显示Pug Power获取wakelocks(唤醒锁)总共超过了一个小时。这个不寻常且代价高的行为可能要为应用电量消耗的高水平负责。这一信息帮助开发者瞄准那些可能给优化带来巨大帮助的区域。在这种情况下,为什么应用获取这么多唤醒锁时间,以及开发者如何改善这种行为?

其它Battery Historian可能有帮助的情况

有很多其它情形,Battery Historian能帮您诊断机会来改善电池行为。例如,Battery Historian能告诉您是否您的应用正在:

  • 过于频繁地触发唤醒警报(每10秒钟或更少)
  • 持续持有GPS锁。
  • 调度工作每30秒或更少。
  • 调度同步每30秒或更少.
  • 使用移动无线网络比预期的更频繁。

结语

本文最大限度保持原文的意思,由于笔者水平有限,若有翻译不准确或不妥当的地方,请指正,谢谢!

【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况的更多相关文章

  1. Knockoutjs官网翻译系列(四) computed中依赖追踪是如何工作的

    初学者无需了解这些 ,但是很多高级程序员想知道我们为什么可以保持跟踪这些依赖以及可以正确的更新到UI中.它其实很简单.跟踪算法是这样的: 无论何时你定义了一个computed observable,K ...

  2. Spring官网阅读 | 总结篇

    接近用了4个多月的时间,完成了整个<Spring官网阅读>系列的文章,本文主要对本系列所有的文章做一个总结,同时也将所有的目录汇总成一篇文章方便各位读者来阅读. 下面这张图是我整个的写作大 ...

  3. 【工利其器】必会工具之(三)systrace篇(1)官网翻译

    前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...

  4. Knockoutjs官网翻译系列(一)

    最近马上要开始一个新项目的研发,作为第一次mvvm应用的尝试,我决定使用knockoutjs框架.作为学习的开始就从官网的Document翻译开始吧,这样会增加印象并加入自己的思考,说是翻译也并不是纯 ...

  5. 程序员必知的技术官网系列--mysql篇

    mysql 官网 https://www.mysql.com/ 官网布局很简单, 其中常用的两块就是下载和文档这两块, 其中下载没什么可讲的, 本次重点依旧是文档. 首页 mysql 文档导航页 ht ...

  6. 卸载 Cloudera Manager 5.1.x.和 相关软件【官网翻译】

    问题导读: 1.不同的安装方式,卸载方法存在什么区别?2.不同的操作系统,卸载 Cloudera Manager Server and 数据库有什么区别? 重新安装不完整如果你来到这里,因为你的安装没 ...

  7. Tomcat 官网知识总结篇

    Tomcat 官网知识总结一.Tomcat 基本介绍 1.关键目录 a) bin 该目录包含了启动.停止和启动其他的脚本,如startup.sh.shutdown.sh等; b) conf 配置文件和 ...

  8. android測试工具MonkeyRunner--google官网翻译

    近期在复习之前的笔记,在回想MonkeyRunner时看了看google官网的内容,写得不错.就翻译出来分享下.事实上google官网真是一个学习的好地方. 基础知识 MonkeyRunner工具提供 ...

  9. Spring官网阅读(十四)Spring中的BeanWrapper及类型转换

    文章目录 接口定义 继承关系 接口功能 1.PropertyEditorRegistry(属性编辑器注册器) 接口定义 PropertyEditor 概念 Spring中对PropertyEditor ...

随机推荐

  1. JavaScript匿名自执行函数~function(){}

    原博客:https://blog.csdn.net/yaojxing/article/details/72784774 1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: ...

  2. 2018年,传言QQ首次被神秘黑客DDOS攻击,Python可以实现?

    于2018-5-10日晚 网络流传黑客DDOS攻击了QQ服务器,导致大家聊天发送内容时出现感叹号.我们都知道一般情况下出现感叹号都是你的网络不稳定,或者...别人已经删除你了.然而昨晚很奇怪,发出的内 ...

  3. 对Python这门课程的理解。

    这门课程是现在热门,对之后的就业和利用的帮助还是很大的. 希望能学完整本书并且能学以致用,而不是单单只获得理论知识. 学完之后能用于数据库.大数据处理.图形编程等等

  4. C++ 模板基础

    我们学习使用C++,肯定都要了解模板这个概念.就我自己的理解,模板其实就是为复用而生,模板就是实现代码复用机制的一种工具,它可以实现类型参数化,即把类型定义为参数:进而实现了真正的代码可重用性.模版可 ...

  5. eclipse下的tomcat配置https(最简单得配置https)

    近期公司列出一大堆的东西,其中包括https,啥也不想说,你们是无法理解的苦逼的我的 本文不是双向认证, 双向认证需要让客户端信任自己生成的证书,有点类似登录银行网站的情,如果想知道双向认证的同志可以 ...

  6. PAT1100:Mars Numbers

    1100. Mars Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue People o ...

  7. Spring Cloud微服务系统下的数据一致性探讨

    我想这个问题需要根据自己的系统具体架构来分别讨论,这边拿一个车联网的系统举例. 拆除GPS这个功能接口需要分几个步骤实现(不涉及数据更新的步骤略去了): ①更改GPS设备状态(设备管理服务) ②更改工 ...

  8. springMVC引入Validation详解

    本文简单介绍如何引入validation的步骤,如何通过自定义validation减少代码量,提高生产力.特别提及:非基本类型属性的valid,GET方法的处理,validation错误信息的统一re ...

  9. ThinkPHP5+Apicloud+vue商城APP实战

    ThinkPHP5+Apicoud+vue商城APP实战 目录 章节1:项目概述 课时1apicloud平台介绍.04:38 课时2知识体系架构介绍.16:10 章节2:apicloud50分钟快速入 ...

  10. REST风格框架实战:从MVC到前后端分离(附完整Demo)

    既然MVC模式这么好,难道它就没有不足的地方吗?我认为MVC至少有以下三点不足:(1)每次请求必须经过“控制器->模型->视图”这个流程,用户才能看到最终的展现的界面,这个过程似乎有些复杂 ...