使用BatteryHistorian分析和优化应用电量

在Android项目中, 较难监控应用的电量消耗, 但是用户却非常关心手机的待机时间. 过度耗电的应用, 会遭到用户无情的卸载, 不要存在侥幸心理, 给竞品带来机会. 因此, 我们需要研究应用的耗电量, 并进行优化. 本文讲解一下Battery Historian, 是一款由Google提供的Android系统电量分析工具. 在网页中展示手机的电量消耗过程, 输入电量分析文件, 显示消耗情况. 最后提供一些电量优化的方法, 可供参考.

1. 安装Go

Battery Historian是Go语言开发, 需要安装Go编译环境. 
下载Mac版的安装包, 执行完成, 检查Go版本

➜  ~ go version
go version go1.6 darwin/amd64

.bash_profile中, 设置Go语言变量

#Go Settings
export GOPATH=/Users/.../Workspace/GoWorkspace
export GOBIN=/Users/.../Workspace/GoWorkspace/bin

GOPATH源码地址. GOBIN生成地址, 推荐$GOPATH/bin. 
执行source .bash_profile, 应用profile配置.

新建src文件夹, 添加HelloWorld文件hello.go.

package mainimport "fmt"func main() {fmt.Printf("hello, world\n")
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

安装hello.go

go install hello.go
  • 1

执行

$GOBIN/hello
  • 1

如果显示hello, world, 即表示安装完成.


2. Battery Historian

在安装Battery Historian时, 需要提前安装wget.

sudo brew install wget

按照Battery Historian的GitHub文档执行操作即可.

go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go
go get -u github.com/google/battery-historian/...
cd $GOPATH/src/github.com/google/battery-historian
bash setup.sh
# 运行Go脚本, 默认端口9999
go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

启动命令

cd $GOPATH/src/github.com/google/battery-historian
go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

在浏览器中, 输入http://localhost:9999/, 即可启动电量检测页面.

在启动页面时, 可能需要连接VPN, 访问Google信息.

3. 分析

获取手机的电量文件, 导出到根目录, 以备Battery Historian使用.

adb bugreport > bugreport.txt
  • 1

使用Battery Historian的网页加载bugreport.txt文件.

如遇到一些问题, 重新提交bugreport.txt文件.

系统状态

应用状态(简书)


4. 电量优化

根据Battery Historian的电量提示信息, 消耗电量包含 
唤醒锁\SyncManager同步管理器\音视频\流量.

优化方式: 
(1) 检查全部唤醒锁, 是否存在冗余或者无用的位置. 
(2) 集中相关的数据请求, 统一发送; 精简数据, 减少无用数据的传输. 
(3) 分析和统计等非重要操作, 可以在电量充足或连接WIFI时进行, 参考JobScheduler. 
(4) 精简冗余的服务(Service), 避免长时间执行耗电操作. 
(5) 注意定位信息的获取, 使用后及时关闭.


电量优化并不是很难, 但需要对业务非常熟悉, 了解一些耗电操作的使用情况, 及时优化. 只有给用户精致的体验, 用户才能更加喜欢我们的应用, 这就是服务型社会的本质.

Android 系统(42)---使用BatteryHistorian分析和优化应用电量相关推荐

  1. 基于Android系统的IPv6网络接入分析

                                                                      基于Android系统的IPv6网络接入分析 摘 要:本文深入分析了 ...

  2. Android系统的JNI原理分析(二)- 数据类型转换和方法签名

    声明 前阶段在项目中使用了Android的JNI技术,在此文中做些技术知识总结. 本文参考了一些书籍的若干章节,比如<Android进阶解密-第9章-JNI原理>.<深入理解Andr ...

  3. 基于android系统DVR稳定性问题分析及对策

    基于android系统DVR稳定性问题分析及对策 DVR,全名Digital Video Recorder,数字视频录像机,在车载行业大家通俗的叫行车记录仪,因为这个数字视频的内容是行车的形式动态.如 ...

  4. Android系统问题及日志分析

    这篇文章全是干货,我们一起聊聊安卓系统稳定性问题.部分性能问题.本篇列举了作者在某厂工作中遇到实际问题,大部分只有日志概率性问题,通过日志分析问题. 自己对这半年工作做个笔记,也希望对大家有用.方便你 ...

  5. 由Debuggerd导致的Android系统死机问题分析

    1. 问题现象 问题发生的Android系统版本是7.0(Nougat): 屏幕没有任何刷新,输入事件无任何响应,即我们平时说的死机(冻屏): watchdog没有重启system_server: 问 ...

  6. Android系统root破解原理分析

    上一篇文章 Android adb 源码分析 理论基础 root破解过程的终极目标是替换掉系统中的su程序.但是要想替换掉系统中su程序本身就是需要root权限的,怎样在root破解过程中获得root ...

  7. Android系统的HAL层分析 -- Sensors

    Android系统HAL层分析 -- Sensors 0 前言 1 HAL层Sensors代码分析/注释 0 前言 1 HAL层Sensors代码分析/注释

  8. Android系统原理性问题分析 - RefBase、sp、wp 分析

    声明 在Android系统中经常会遇到一些系统原理性的问题,在此专栏中集中来讨论下. 接触Android系统,遇到很多sp.wp相关问题,此篇分析Android系统内的智能指针问题. 此篇参考一些博客 ...

  9. 京东怎么做《IOS系统APP耗电量检测分析和优化》?

    耗电量不仅是衡量应用性能表现的一个重要指标,同时也是用户体验的重要组成部分.要做好⼀款APP,不仅仅是实现功能那么简单,我们需要考虑很多性能指标,让用户用的更爽.在开发过程中,要充分考虑到各项性能指标 ...

最新文章

  1. NOIP2002 均分纸牌
  2. boost::random模块使用多精度类型测试所有与整数相关的生成器和分布的测试程序
  3. Spring框架功能整体介绍
  4. 反射练习之越过泛型检查
  5. 用python来获取Github IP地址
  6. C++:52---多重继承
  7. fopen文件路径怎么写_PHP文件上传
  8. 【顺序表和链表】实现增删查改数据结构 OJ题编程
  9. 【C++】CCFCSP201803-1跳一跳
  10. 2020 OPPO 开发者大会重磅推出 ColorOS 11,适配机型达 33 种
  11. 常见问题与常见算法的时间复杂度
  12. 金属100寸“电视”却无屏,语音识别+DTS+1080P,微鲸M1测评
  13. maskrcnn ImportError: cannot import name ‘_C‘
  14. Atitit 面向对象  封装的实现原理
  15. 工厂供电技术实训设备QY-PGD19
  16. Android mvp 架构的自述
  17. 基于图书管理系统的需求分析之数据流图
  18. Dedecms去掉所有版权
  19. ASP.NET AES加密
  20. python 3 12306余票查询脚本

热门文章

  1. 源码编译php mysql_linux下apache+mysql+php开发环境纯源代码编译搭建(转)
  2. c/c++通用头文件
  3. Swagger原理解析
  4. OpenCV数据结构
  5. 开源框架openresty+nginx 实现web应用防火墙(WAF)
  6. 关于建立 Carbon Forum 后 设置访问链接的问题
  7. 小狼程序员:工作遐想
  8. sql STUFF 分组
  9. php基础知识 书写格式
  10. (学习进度表)【第八周】