Android官方开发文档Training系列课程中文版:电池续航时间优化之监测电池电量及充电状态

原文地址:http://android.xsoftlab.net/training/monitoring-device-state/index.html

引言

作为一款优秀的APP应用,应该总是想方设法的降低电量的消耗。通过这节课的学习,你将有能力使APP可以基于设备的状态来调整APP的功能及行为。

我们可以通过比如在断开连接时关闭后台服务,或者在电量低的时候降低更新的频率等等手段来降低电量的消耗。

监测电池电量及充电状态

在更改后台的更新频次时,检查当前的电池电量及充电状态是我们先要做的。

应用程序的更新频率取决于电池的电量以及充电状态。由于设备处于充电状态时应用的耗电量几乎可以忽略,所以,在设备连接到充电器时,你可以将应用的刷新频率开到最大,如果设备没有在充电,那么降低更新频率可以延长电池的使命时间。

检查当前的充电状态

首先我们需要检查当前的充电状态。BatteryManager会将电池信息以及充电信息通过粘性Intent将其广播。

因为是粘性Intent,所以不需要注册BroadcastReceiver,只需要在调用registerReceiver()时传一个null就可以,当前的电池状态由该方法直接返回。你也可以在这里传递一个BroadcastReceiver对象,但是我们接下来的处理方式并不是在其中做的,所以这并不是必须的。

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

如果设备当前处于充电状态,那么可以获得当前的充电状态,无论它是通过USB还是通过AC适配器充电的。

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;
// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

通常的做法是:应当是在连接到AC电源适配器时,将后台的更新频率加到最大,如果当前处于USB状态,这个频率应当适当降低,如果断开充电,则应当进一步降低。

监测充电状态的变化

设备的充电状态很容易随着充电器的插入、拔出而发生变化。所以随着充电状态的变化应当相应的调整应用的刷新频率。

当设备插上充电器或是拔出充电器时,BatteryManager都会广播一个Action,所以应当注册一个BroadcastReceiver用来监听这些事件。在清单文件中需要定义ACTION_POWER_CONNECTED及ACTION_POWER_DISCONNECTED的意图过滤器。

<receiver android:name=".PowerConnectionReceiver"><intent-filter><action android:name="android.intent.action.ACTION_POWER_CONNECTED"/><action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/></intent-filter>
</receiver>

在该BroadcastReceiver内,你可以获取当前的充电状态:

public class PowerConnectionReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;}
}

检查电池的剩余电量

在一些情况下还需要检查设备的剩余电量。当电量较低时可能需要降低应用的后台服务频率。

你可以通过以下方式获得设备的剩余电量:

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;

监测电量的重要变化

应用不能一直连续不断的监听电池的状态。

通常来说,一直不断的监听电池电量会使监听电池的任务大于应用的实际任务,所以最好是只监听一些比较重要的变更事件。

下面的清单文件摘自一段广播接收器内。该广播接收器会在电池的电量很低时或者是在电量恢复到安全水平时被触发。它监听了两个事件:ACTION_BATTERY_LOW及ACTION_BATTERY_OKAY.

<receiver android:name=".BatteryLevelReceiver">
<intent-filter><action android:name="android.intent.action.ACTION_BATTERY_LOW"/><action android:name="android.intent.action.ACTION_BATTERY_OKAY"/></intent-filter>
</receiver>

通常情况下,在电量很低时要关闭所有的后台更新。加载在使用APP之前,手机关机了,那么应用的数据是否是最新的就没那么重要了。

在很多情况下,手机充电时是被放在一个固定的位置上的。下节课我们将会学习如何检查设备的放置环境以及如何监测设备的放置状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1009. 十进制整数的反码(位运算)

1. 题目 每个非负整数 N 都有其二进制表示。例如&#xff0c; 5 可以被表示为二进制 “101”&#xff0c;11 可以用二进制 “1011” 表示&#xff0c;依此类推。注意&#xff0c;除 N 0 外&#xff0c;任何二进制表示中都不含前导零。 二进制的反码表示是将每个 1 改为 0 且…

新分类!全总结!最新Awesome-SLU-Survey资源库开源!

文 | 哈工大SCIR 覃立波、谢天宝等指导老师 | 哈工大SCIR 车万翔教授简介口语语言理解&#xff08;Spoken Language Understanding&#xff0c;SLU&#xff09;作为任务型对话系统的核心组件&#xff0c;目的是为了获取用户询问语句的框架语义表示&#xff08;semantics frame&…

技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)

本文转载自公众号&#xff1a;Nebula Graph Community 。我们都知道《权利的游戏》在全世界都很多忠实的粉丝&#xff0c;除去你永远不知道剧情下一秒谁会挂这种意外“惊喜”&#xff0c;当中复杂交错的人物关系也是它火爆的原因之一&#xff0c;而本文介绍如何通过 NetworkX 访…

python将pdf中的每一页转化为图片保存

import PyPDF4 import pikepdf import fitz #对pdf文件进行简单的解密 def jiemi(pdfpath):new_pdfpath pdfpath[:-4] _new pdfpath[-4:]fp open(pdfpath, "rb")pdfFile PyPDF4.pdf.PdfFileReader(fp)# pdf 解密if pdfFile.isEncrypted:pdf pikepdf.open(pdfp…

美团外卖Android Crash治理之路

Crash率是衡量一个App好坏的重要指标之一&#xff0c;如果你忽略了它的存在&#xff0c;它就会愈演愈烈&#xff0c;最后造成大量用户的流失&#xff0c;进而给公司带来无法估量的损失。本文讲述美团外卖Android客户端团队在将App的Crash率从千分之三做到万分之二过程中所做的大…

全栈深度学习第7期: 研究方向这么多,哪些是有有趣又潜力的呢?

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目&#xff0c;通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。Berkeley深度学习追剧群目前已有1000小伙伴加入&#xff0c;公众号后台回复口令 深度学习追剧 入群。…

会议交流 | 人工智能与机器学习创新峰会 - 知识图谱与图神经网络分会

人工智能与机器学习创新峰会力邀 HBAT 等大厂资深研发专家做分享和技术展望时间&#xff1a;9月4日下午1:30地点&#xff1a;浦东海神诺富特大酒店OpenKG开放知识图谱&#xff08;简称 OpenKG&#xff09;旨在促进中文知识图谱数据的开放与互联&#xff0c;促进知识图谱和语义技…

Android官方开发文档Training系列课程中文版:电池续航时间优化之检查与监测坞的状态与类型

原文地址&#xff1a;http://android.xsoftlab.net/training/monitoring-device-state/docking-monitoring.html Android设备可以被放置在若干种不同的扩展坞中。这些扩展坞包括汽车坞与家庭坞以及数字与模拟坞。其中坞的状态与充电状态非常相近&#xff0c;因为这些坞也提供了…

OpenCV和tesseract-ocr的安装及使用

tesseract-ocr的安装及使用&#xff1a;https://blog.csdn.net/qq_37193537/article/details/81335165 三步解决python PermissionError: [WinError 5]拒绝访问的情况&#xff1a; https://www.jb51.net/article/185218.html https://www.pianshen.com/article/43251972054/ …

LeetCode 1046. 最后一块石头的重量(priority_queue 堆)

1. 题目 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出两块最重的石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两块石头都…

深度学习如何均衡精度、内存、计算和通信开销?

文 | 立交桥跳水冠军知乎本文已获作者授权&#xff0c;禁止二次转载鱼与熊掌不可兼得&#xff0c;深度学习领域中的几个指标也相同。主要的指标有如下四个&#xff1a;&#xff08;1&#xff09;精度&#xff1a;自然精度是一个模型最根本的衡量指标&#xff0c;如果一个模型精…

深度学习在美团搜索广告排序的应用实践

一、前言 在计算广告场景中&#xff0c;需要平衡和优化三个参与方——用户、广告主、平台的关键指标&#xff0c;而预估点击率CTR&#xff08;Click-through Rate&#xff09;和转化率CVR&#xff08;Conversion Rate&#xff09;是其中非常重要的一环&#xff0c;准确地预估CT…

论文浅尝 - ICML2020 | 拆解元学习:理解 Few-Shots 任务中的特征表示

论文笔记整理&#xff1a;申时荣&#xff0c;东南大学博士生。来源&#xff1a;ICML2020链接&#xff1a;http://arxiv.org/abs/2002.06753元学习算法会生成特征提取器&#xff0c;这些特征提取器在进行few-shot分类时就可以达到最新的性能。尽管文献中有大量的元学习方法&…

Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态

原文地址&#xff1a;http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一些后台服务需要连接到网络来更新数据。但是如果没有连接到互联网&#xff0c;或者由于网络太慢而不能完成更新&#xff0c;那么为什么不在连接到网…

LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)

1. 题目 2. 解题 类似题目&#xff1a;LeetCode 308. 二维区域和检索 - 可变&#xff08;前缀和&#xff09; dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i1][j1]sum[i1][j]sum[i][j1]matrix[i][j]−sum[i][j]sum[i1][j1] sum[i1][j]sum[i][j1]matrix[i][j]-sum[i][j]…

一键离线下载python安装包:

Python 第三方库 批量下载安装包,离线批量安装Python第三方库&#xff1a;https://www.cnblogs.com/qiuyubai/p/14084501.html 核心代码&#xff1a; 一键生成安装包的索引文件requirements.txt pip freeze >requirements.txt pip download -d ./ -r requirements.txt全部…

论文浅尝 - ICML2020 | 对比图神经网络解释器

论文笔记整理&#xff1a;方尹&#xff0c;浙江大学在读博士&#xff0c;研究方向&#xff1a;图表示学习。Contrastive Graph Neural Network Explanation动机与贡献本文主要关注图神经网络的解释性问题&#xff0c;这样的解释有助于提升GNN的可信度&#xff0c;能够更好的理解…

这可能是最简单又有效的自监督学习方法了

文 | 王珣知乎本文已获作者授权&#xff0c;禁止二次转载从Kaiming的MoCo和Hinton组Chen Ting的SimCLR开始&#xff0c;自监督学习&#xff08;SSL&#xff09;成了计算机视觉的热潮显学。凡是大佬大组&#xff08;Kaiming, VGG&#xff0c;MMLAB等&#xff09;&#xff0c;近两…

大众点评账号业务高可用进阶之路

引言 在任何一家互联网公司&#xff0c;不管其主营业务是什么&#xff0c;都会有一套自己的账号体系。账号既是公司所有业务发展留下的最宝贵资产&#xff0c;它可以用来衡量业务指标&#xff0c;例如日活、月活、留存等&#xff0c;同时也给不同业务线提供了大量潜在用户&…

Android官方开发文档Training系列课程中文版:电池续航时间优化之按需开启广播接收器

原文地址&#xff1a;http://android.xsoftlab.net/training/monitoring-device-state/manifest-receivers.html 监测设备状态变化最简单的实现方式就是为每种状态都创建一个广播接收器&#xff0c;然后只需在相应的广播接收器内依据当前的设备状态重新执行各自的任务即可。 …