为什么要做电量优化

Android应用开发中,需要考虑的情况是,如何优化电量使用,让我们的app不会因为电量消耗过高被用户排斥,或者被其他安全应用报告。

什么样的行为会导致电量损耗过高

对于移动设备而言,有以下几种行为会导致设备电量的消耗增加

1.屏幕保持开启状态

2.蜂窝网络的频繁启动与关闭

如何观测我们的应用电量使用情况

可以先使用以下adb命令,生成我们应用的电量使用情况txt

adb kill-servers

adb devices

adb shell dumpsys batterystats --reset

1

2

3

adbkill-servers

adbdevices

adbshelldumpsysbatterystats--reset

从电脑拔出手机,操作一会我们的目标app,再接上电脑

adb kill-servers

adb devices

adb shell dumpsys batterystats --reset

1

2

3

adbkill-servers

adbdevices

adbshelldumpsysbatterystats--reset

然后再去https://github.com/google/battery-historian 下载zip文件

找到下载文件中的historian.py,拷贝到常用位置

接下把cmd转到刚刚存放文件的位置来运行

python historian.py battery.txt > battery.html

1

pythonhistorian.pybattery.txt>battery.html

运行结束后就得到了一个html文件,可以在浏览器打开查看

顶部是电量情况

最左边是各种行为

底部是时间间隔(如下图,点击查看大图)

优化API——PowerManager.WakeLock

PowerManager.WakeLock 可以通过 acquire()方法获得,使设备保持在获取时的状态。

在执行完任务之后,我们需要调用release()方法来释放锁,这样,设备就会在空闲的时候进行休眠来节省电池使用。

优化API——JobScheduler

在满足特定条件后,自动执行任务

用法如下代码

private void downloadSmarter() {

JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

// Beginning with 10 here to distinguish this activity's jobs from the

// FreeTheWakelockActivity's jobs within the JobScheduler API.

mServiceComponent = new ComponentName(this, MyJobService.class);

for (int i=10; i<20; i++) {

JobInfo jobInfo = new JobInfo.Builder(i, mServiceComponent)

.setMinimumLatency(5000) // 5 seconds

.setOverrideDeadline(60000) // 60 seconds (for brevity in the sample)

.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) // for Wifi only

.build();

mWifiMsg.append("Scheduling job " + i + "!\n");

scheduler.schedule(jobInfo);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

privatevoiddownloadSmarter(){

JobSchedulerscheduler=(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE);

// Beginning with 10 here to distinguish this activity's jobs from the

// FreeTheWakelockActivity's jobs within the JobScheduler API.

mServiceComponent=newComponentName(this,MyJobService.class);

for(inti=10;i<20;i++){

JobInfojobInfo=newJobInfo.Builder(i,mServiceComponent)

.setMinimumLatency(5000)// 5 seconds

.setOverrideDeadline(60000)// 60 seconds (for brevity in the sample)

.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// for Wifi only

.build();

mWifiMsg.append("Scheduling job "+i+"!\n");

scheduler.schedule(jobInfo);

}

}

MyJobService 是我们自定义的继承自 JobService 的一个类,我们可以在其内部做一些处理,例如网络请求等等。

当满足特定条件时,这些job就会被调用,例子中使用的条件是,当wifi连接时。

要注意的是,这个api是在21以后才添加的。

android电量优化方法,Android性能优化——电池使用优化相关推荐

  1. Linux基础优化方法(二)———系统安全相关优化:防火墙和selinux

    Linux基础优化方法(二)---系统安全相关优化:防火墙和selinux 一.系统防火墙服务优化 1.CentOS 6 ①.查看防火墙服务状态 ②.临时关闭防火墙服务 ③.永久关闭防火墙服务 2.C ...

  2. 【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择?

    大家好,欢迎来到专栏<调参实战>,虽然当前自动化调参研究越来越火,但那其实只是换了一些参数来调,对参数的理解和调试在机器学习相关任务中是最基本的素质,在这个专栏中我们会带领大家一步一步理解 ...

  3. Android代码混淆方法,Android 代码混淆零基础入门

    内容提要 本篇文章主要有三个部分,让读者读完后能自己写规则混淆项目 对Android代码怎么开启混淆做一个简单的介绍. 对混淆规则做一个简单介绍: 在混淆过后Crash日志反推代码工具retrace. ...

  4. android studio复写方法,Android Studio 常用快捷键

    以下是对 Android Studio 默认风格 的常用快捷键汇总: 快捷键 说明 Ctrl + X 剪切 Ctrl + D 在当前下方复制一行 Ctrl + E 查看最近打开的文件 Ctrl + N ...

  5. android 电量控件,Android实现显示电量的控件代码

    下面介绍了Android实现显示电量的控件代码,具体代码如下: 1.目录结构,本人是使用安卓死丢丢. 2.运行界面,输入框中输入数值,点击刷新,会再电池中显示出相应的电量 3.绘制自定义电池控件,首先 ...

  6. android datepicker使用方法,android DatePicker

    Date Picker 提供了一个构件去选择一个时间,使用DatePicker构件,该构件允许用户去选择月,日,年在一个界面中. 实例介绍 首先我们应该先创建一个DatePickerDialog,该D ...

  7. android view使用方法,Android View构造方法第三参数使用方法详解

    我们都知道,在Android中要使用一个View,一般会有两种方式: 在XML文件中配置: 直接在代码中new一个View的对象. 我们今天讨论的内容就是围绕着View的构造方法的. 1.实例 首先我 ...

  8. android返回键方法,Android按返回键(后退键)Back键事件捕获的两种方法

    package zhangphil.back; import android.support.v7.app.ActionBarActivity; import android.util.Log; im ...

  9. android avd 使用方法,Android中Android Virtual Device(AVD)使用教程

    AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别.建立的Android要运行,必须创建AVD,每个AVD上可以配置很多的运 ...

  10. android datepicker使用方法,android中DatePicker和TimePicker的使用方法详解

    本文以实例讲述了android中DatePicker和TimePicker的使用方法,具体步骤如下: 下面是实现具体功能的代码,其中main.xml代码为: android:layout_width= ...

最新文章

  1. Codeforces40E[Number Table]
  2. WebBrowser1.Navigate重复载入同一页面时载入的是旧页面
  3. [Oracle运维工程师手记] 如何从trace 文件,判断是否执行了并行
  4. .NET/C# 获取一个正在运行的进程的命令行参数
  5. 网络优化软件apk,金九银十怎么从中小企业挤进一线大厂?我先收藏为敬
  6. Apache开启Gzip压缩设置(转)
  7. Java 蓝桥杯 字符串对比
  8. bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)
  9. Android报错:FAILED:_nl_intern_locale_data: ?? ‘cnt < (sizeof (_nl_value_type_LC_TIME)
  10. 深度学习1-深度学习框架介绍
  11. java rt.jar的源代码的位置
  12. MySQL联合查询及取别名
  13. OpenLinux平台学习(参照Neoway N720/N75 系列产品)
  14. 信息学奥赛 python 教程_浦东信息学奥赛课程价格表,Python编程课程
  15. P15 实战:Kaggle房价预测
  16. es - elasticsearch - search - DSL - specialized - pinned
  17. TCP服务器和客户端的创建(socket/socketserver)
  18. Android图片上传服务器(File格式)
  19. LeetCode 52
  20. 路由器数据统计SQL脚本

热门文章

  1. 高德地图第三方组件应用
  2. 数据统计分析(SPSS)【2】
  3. 终于有人把“内卷”和“囚徒困境”讲明白了!
  4. Android Beacon 开发(IBeacon)
  5. 做你喜欢做的事,财富会随之而来
  6. 下一代 Web 应用模型 —— Progressive Web App
  7. oracle 日期 区别,oracle中日期类型 to_date 和to_timestamp什么区别啊?
  8. Android手机拍照功能实现
  9. JavaScript排他思想
  10. 八键电话号码的字母组合