Android 性能优化 (一)APK高效瘦身

http://blog.csdn.net/whb20081815/article/details/70140063

Android 性能优化 (二)数据库优化 秒变大神

http://blog.csdn.net/whb20081815/article/details/70142033

Android 性能优化(三)布局优化 秒变大神

http://blog.csdn.net/whb20081815/article/details/70147958

Android 性能优化(四)内存优化OOM 秒变大神

http://blog.csdn.net/whb20081815/article/details/70243105

Android 性能优化(五)ANR 秒变大神

http://blog.csdn.net/whb20081815/article/details/70245594

Android 性能优化(六) RelativeLayout和LinearLayout性能比较

http://blog.csdn.net/whb20081815/article/details/74465870

Android 性能优化<七>自定义view绘制优化

http://blog.csdn.net/whb20081815/article/details/74474736

Android 性能优化<八> 多线程优化和线程管理

https://blog.csdn.net/WHB20081815/article/details/77775444

Android 性能优化 <九>RecyclerView替代Listview用法

https://blog.csdn.net/WHB20081815/article/details/76221998

Android 性能优化 (十) 启动优化 秒变大神 启动优化提升60%

https://blog.csdn.net/WHB20081815/article/details/88595045

Battery-Historian 电量分析工具的使用

Battery History 工具安装

根据 gitbub 上面介绍,Battery History 工具的安装有两种方式:

方式1: 通过安装 Docker 环境来安装。(这种方式很简单,Docker 真心好用)

  1. 按照 Docker 网站上的说明安装 Docker Community Edition。
  2. 使用以下命令运行 Battery Historian 镜像:
docker --run -p port_number:9999 gcr.io/android-battery-historian:2.1 --port 9999

方式2 通过编译 gitbub 上面的源码来安装。

  1. GO 环境安装:具体可以参考 Mac os 安装 golang 开发环境(www.jianshu.com/p/79bdd20c4…)
  2. 安装 git.
  3. 安装 Python。仅支持 python2.7 (www.python.org/ )
  4. 安装Java环境

下载 Battery Historian 源码并且运行

输入如下命令行 下载到GOPATH 配置目录下。

go get -d -u github.com/google/battery-historian/...

进入到$GOPATH/src/github.com/google/battery-historian目录下方

cd $GOPATH/src/github.com/google/battery-historian

运行 Battery Historian 1.执行命令:

go run setup.go

Compile Javascript files using the Closure compiler

2.接着在执行命令:

go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

Run Historian on your machine (make sure GOBIN) 3.登录网址http://localhost:9999查看battery-historian是否运行。

到此Battery-historian的环境就整好了。

电量数据收集

Android 5.0 及以上的设备, 允许我们通过 adb 命令 dump 出电量使用统计信息。 1.因为电量统计数据是持续的, 会非常大, 统计待测试的 App 之前需要连上设备,因此需要reset(重置)电池数据收集。命令行执行:

$ adb shell dumpsys batterystats --resetBattery stats reset

2.断开usb连接的测试设备, 操作要测试的App。

3.重新连接设备, 使用 adb 命令导出相关统计数据:

  • Android 7.0 及以上执行如下命令:
adb bugreport > [path/]bugreport.zip
  • Android 5.0/ 6.0执行如下命令:
adb bugreport > [path/]bugreport.txt

导出的统计数据存储到 bugreport.zip(bugreport.txt), 借助 battery-historian 工具来图形化 展示电池的消耗情况.

上传 bugreport.zip(bugreport.txt)文件至 http://localhost:9999:

分析指标

下图是使用 adb 命令将采集的电量数据上传至 Battery Historian 而得到电量的分析情况。(我们可以通过包名过滤具体应用的耗电情况)

了解手机关键耗电的地方及分析耗电的工具后。接下来就是我们的核心,如何来进行电量的优 化?首先我们先简单总结汇总一下耗电的相关因素

  • 屏幕亮暗相关
  • 设备 awake,sleep 的切换,尤其是唤醒.
  • CPU 运行相关
  • 网络
  • 传感器

我们都知道屏幕的渲染及 CPU 的运行是耗电的主要因素之一。所以当我们在做内存优化、渲染优化、计算优化的时候,就已然在做电量优化。

监听手机充电状态

我们可以通过下面的代码来获取手机的当前充电状态:

得到充电状态信息之后,我们可以有针对性的对部分代码做优化。比如我们可以判断只有当前 手机为 AC 充电状态时 才去执行一些非常耗电的操作。可以通过下面的方法判断手机当前的充 电状态。

考虑将一些不需要及时地和用户交互的操作放到充电 的时候去做。

比如:360 手机助手,当充上电的时候,才会自动清理手机垃圾,自动备份上传图片、联系人 等到云端,从而避免当用户手机低电量时,任然继续进行耗电操作。

屏幕唤醒

当 Android 设备空闲时,屏幕会变暗,然后关闭屏幕,最后会停止 CPU 的运行,这样可以防 止电池电量掉的快。但有些时候我们需要改变 Android 系统默认的这种状态:比如玩游戏时我 们需要保持屏幕常亮,比如一些下载操作不需要屏幕常亮但需要 CPU 一直运行直到任务完成。

保持屏幕常亮比较好的方式是在 Activity 中使用 FLAG_KEEP_SCREEN_ON 的 Flag。

这个方法的好处是不像唤醒锁(wake locks),需要一些特定的权限(permission)。并且能 正确管理不同 app 之间的切换,不用担心无用资源的释放问题。

另一个方式是在布局文件中使用 android:keepScreenOn 属性:

android:keepScreenOn = “true”的作用和 FLAG_KEEP_SCREEN_ON 一样,使用代码的好 处是你允许你在需要的地方关闭屏幕。

注意:一般不需要人为的去掉 FLAG_KEEP_SCREEN_ON 的 flag,windowManager 会管理好程序进入 后台回到前台的的操作。如果确实需要手动清掉常亮的 flag,使用

所以这里我们需要根据自己的 APP 实际情况,根据业务来控制好是否保持屏幕常量。比如 APP 需要支持视频播放。那么在播放的界面需要控制好不熄屏,当退出播放时,当然就没有了 这个设置。

WakeLock

wake_lock 锁主要是相对系统的休眠而言的,意思就是程序给 CPU 加了这个锁那系统就不会 休眠了,这样做的目的是为了全力配合我们程序的运行。有的情况如果不这么做就会出现一些 问题。 需要使用 PowerManager 这个系统服务的唤醒锁(wake locks)特征来保持 CPU 处于唤醒状 态。唤醒锁允许程序控制宿主设备的电量状态,创建和持有唤醒锁对电池的续航有较大的影 响,所以,除非是真的需要唤醒锁完成尽可能短的时间在后台完成的任务时才使用它。比如在 Acitivity 中就没必要用了。如果需要关闭屏幕,使用上述的 FLAG_KEEP_SCREEN_ON。

只有一种合理的使用场景,使用后台服务在屏幕关闭情况下 hold 住 CPU 完成一些工作,需要 使用唤醒锁,如果不使用唤醒锁来执行后台服务,不能保证因 CPU 休眠未来的某个时刻任务 会停止,这不是我们想要的。

唤醒锁可划分并识别为四种用户唤醒锁:

标记值 CPU 屏幕 键盘
PARTIAL_WAKE_LOCK 开启 关闭 关闭
SCREEN_DIM_WAKE_LOCK 开启 变暗 关闭
SCREEN_BRIGHT_WAKE_LOCK 开启 变亮 关闭
FULL_WAKE_LOCK 开启 变亮 变亮

注意:自 API 等级 17 开始,FULL_WAKE_LOCK 将被弃用。 应用应使用 FLAG_KEEP_SCREEN_ON。

1.添加唤醒锁权限:

2.直接使用唤醒锁:

注意:在使用该类的时候,必须保证 acquire 和 release 是成对出现的。不然当我们业务已经不需要时, 当 CPU 处于唤醒状态,这个时候就会损耗多余的电量。

JobScheduler

自 Android 5.0 发布以来,JobScheduler 已成为执行后台工作的很好的方式,其工作方式有 利于用户在适当的时机执行正确的事情。应用可以在安排作业的同时允许系统基于内存、电源 和连接情况进行优化。JobSchedule 的宗旨就是把一些不是特别紧急的任务放到更合适的时机 批量处理。这样做有两个好处:

  • 避免频繁的唤醒硬件模块,造成不必要的电量消耗。
  • 避免在不合适的时间(例如低电量情况下、弱网络或者移动网络情况下的)执行过多的 任务消耗电量。

GPS

选择合适的 Location Provider

Android 系统支持多个 Location Provider:

  • GPS_PROVIDER: GPS 定位,利用 GPS 芯片通过卫星获得自己的位置信息。定位精准度高,一般在 10 米左右, 耗电量大;但是在室内,GPS 定位基本没用。
  • NETWORK_PROVIDER: 网络定位,利用手机基站和 WIFI 节点的地址来大致定位位置,这种定位方式取决于服务器, 即取决于将基站或 WIF 节点信息翻译成位置信息的服务器的能力。
  • PASSIVE_PROVIDER: 被动定位,就是用现成的,当其他应用使用定位更新了定位信息,系统会保存下来,该应用接 收到消息后直接读取就可以了。

如果 App 只是需要一个粗略的定位那么就不需要使用 GPS 进行定位,既耗费电量,定位的耗 时也久。

及时注销定位监听

在获取到定位之后或者程序处于后台时,注销定位监听,此时监听 GPS 传感器相当于执行 no- op(无操作指令),用户不会有感知但是却耗电。

多模块使用定位尽量复

多个模块使用定位,尽量复用上一次的结果,而不是都重新走定位的过程,节省电量损耗;例 如:在应用启动的时候获取一次定位,保存结果,之后再用到定位的地方都直接去取。

传感器

使用传感器,选择合适的采样率,越高的采样率类型则越费电。

  • SENSOR_DELAY_NOMAL (200000 微秒)
  • SENSOR_DELAY_UI (60000 微秒)
  • SENSOR_DELAY_GAME (20000 微秒)
  • SENSOR_DELAY_FASTEST (0 微秒)

在后台时注意及时注销传感器监听

Android 性能优化 (十一) 电量优化全解析 秒变大神相关推荐

  1. Android 性能优化(三)布局优化 秒变大神

    Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...

  2. Android 性能优化(五)ANR 秒变大神

    Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...

  3. 最全Mac系统快捷键一览 学会了一秒变大神!

    你对Mac快捷键知道多少? 只停留在Ctrl+C/V来粘贴复制 Ctrl+S保存文档? 快捷键为我们省去了一些时间 但Mac还有许多更容易记住且非常有用的快捷键 小编将其整理出来 希望它可以在你的工作 ...

  4. Android 进阶——性能优化之电量优化全攻略及实战小结(二)

    文章大纲 引言 一.在低电耗模式和应用待机模式下进行测试 1.在低电耗模式下测试您的应用 2.在应用待机模式下测试您的应用 3.列入白名单的可接受用例 4.确定当前充电状态 5.监控充电状态变化 6. ...

  5. Android App优化:内存优化、电量优化、网络优化等 (2)

    -- 优化专题: 整理一系列的专题:比如APK瘦身.插件化.程序架构.性能优化.自定义view.增量升级.移动开发各种技术解决方案等.   Android后期发展的五大趋势:一.性能优化:二.高级UI ...

  6. 【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )

    文章目录 一.AlarmManager 简介 二.使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) 三.使用 WeakLock 保持 CPU 唤醒 代码示例 1.Service ...

  7. 【Android 电量优化】电量优化 ( Battery Historian 环境要求 | 电量分析报告 | 电量优化三原则 | 电量优化注意事项 )

    文章目录 一.Battery Historian 环境要求 二.上传电量报告 三.Battery Historian 电量分析报告 四.电量优化三原则 五.电量优化注意事项 参考 Google 官方文 ...

  8. 【Android 电量优化】电量优化 ( 获取电量分析报告 | 阿里云服务器搭建 Battery Historian | 上传并生成分析报告 )

    文章目录 一.Battery Historian 搭建环境 二.获取 Android 手机电量报告 1.重置电量状态 2.开启获取 WeakLock 信息 3.获取手机电量报告 三.阿里云服务器搭建 ...

  9. Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

    本文转载自郭神的Glide分析系列:http://blog.csdn.net/guolin_blog/article/details/78582548 本文同步发表于我的微信公众号,扫一扫文章底部的二 ...

  10. Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78357251 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

最新文章

  1. 移动端整屏滑动的实现
  2. Spring的控制反转以及依赖注入,控制反转使程序具有高拓展性。
  3. 基类使用私有数据_C++作业之多继承与虚基类
  4. 史上最全memcached面试26题和答案
  5. fast角点检测 java_opencv3_java 图像的角点检测DetectConers goodFeaturesToTrack
  6. SpringMVC 的运行流程
  7. linux下简单好用的端口映射转发工具rinetd
  8. 判断json对象的属性的值是json对象还是json数组
  9. 第十七届振兴杯计算机程序设计员(云计算平台运维与开发)决赛
  10. SELinux用audio2allow生成添加权限的格式及neverallow解决方法
  11. MATLAB制图代码
  12. Cartopy 0.20 最新功能 —— Cartopy 装不上别慌,内附解决方案
  13. 交换机启用光口命令_H3C交换机光电复用口如何启用
  14. JavaScript-点击复制内容
  15. sprintf你知道多少
  16. Maven was cached in the local repository, resolution will not be reattempted until the update interv
  17. Frank 直面数据结构
  18. 【Amber】使用高斯16优化小分子结构并计算RESP电荷
  19. 用自有工作站做服务器建网站,服务器搭建工作站
  20. linux系统加exfat驱动

热门文章

  1. Egret白鹭引擎简介麻将游戏开发流程
  2. Java中的native方法的使用
  3. sk hynix 固态硬盘 管理_5000MB/s 极速狂飙——希捷酷玩FireCuda 520 PCIE4.0 SSD固态硬盘体验...
  4. 倍福--软件界面介绍
  5. 飞思卡尔单片机DZ60---时钟初始化
  6. mcgscom口针脚定义_各种接口针脚定义
  7. java 根据身份证计算年龄(周岁)
  8. c语言字符型常量的例题,C语言笔试题100道
  9. 小米笔记安装双系统linux,小米笔记本电脑怎么安装双系统?-小米win7
  10. 穿越计算机的迷雾--读书笔记三