Android电量优化,让你的手机续航更持久

节能减排,从我做起。一款Android应用如果非常耗电,是一定会被主人嫌弃的。自从Android手机的主人用了你开发的app,一天下来,也没干啥事,电就没了。那么他就会想尽办法找出耗电量杀手,当他找出后,很有可能你开发的app就被无情的卸载了。为了避免这种事情发生,我们就要想想办法让我们的应用不那么耗电,电都用在该用的时候和地方。

通过power_profile.xml查看各个手机硬件的耗电量

Google要求手机硬件生产商都要放入power_profile.xml文件到ROM里面。有些不太负责的手机生产商,就乱配,也没有真正测试过。但我们还是可以大概知道耗电的硬件都有哪些。

先从https://ibotpeaches.github.io/Apktool/ 下载apktool反编译工具,然后执行adb命令,将手机framework的资源apk拉取出来。

adb pull /system/framework/framework-res.apk ./

然后我们用下载好的反编译工具,将framework-res.apk进行反编译。

java -jar apktool_2.7.0.jar d framework-res.apk

apktool_2.7.0.jar换成你下载的具体的jar包名称。
power_profile.xml文件的目录如下:

framework-res/res/xml/power_profile.xml

<?xml version="1.0" encoding="utf-8"?>
<device name="Android"><item name="ambient.on">0.1</item><item name="screen.on">0.1</item><item name="screen.full">0.1</item><item name="bluetooth.active">0.1</item><item name="bluetooth.on">0.1</item><item name="wifi.on">0.1</item><item name="wifi.active">0.1</item><item name="wifi.scan">0.1</item><item name="audio">0.1</item><item name="video">0.1</item><item name="camera.flashlight">0.1</item><item name="camera.avg">0.1</item><item name="gps.on">0.1</item><item name="radio.active">0.1</item><item name="radio.scanning">0.1</item><array name="radio.on"><value>0.2</value><value>0.1</value></array><array name="cpu.active"><value>0.1</value></array><array name="cpu.clusters.cores"><value>1</value></array><array name="cpu.speeds.cluster0"><value>400000</value></array><array name="cpu.active.cluster0"><value>0.1</value></array><item name="cpu.idle">0.1</item><array name="memory.bandwidths"><value>22.7</value></array><item name="battery.capacity">1000</item><item name="wifi.controller.idle">0</item><item name="wifi.controller.rx">0</item><item name="wifi.controller.tx">0</item><array name="wifi.controller.tx_levels" /><item name="wifi.controller.voltage">0</item><array name="wifi.batchedscan"><value>.0002</value><value>.002</value><value>.02</value><value>.2</value><value>2</value></array><item name="modem.controller.sleep">0</item><item name="modem.controller.idle">0</item><item name="modem.controller.rx">0</item><array name="modem.controller.tx"><value>0</value><value>0</value><value>0</value><value>0</value><value>0</value></array><item name="modem.controller.voltage">0</item><array name="gps.signalqualitybased"><value>0</value><value>0</value></array><item name="gps.voltage">0</item>
</device>

抓到不负责任的手机生产商一枚,好家伙,这么多0.1,明眼人一看就知道这是为了应付Google。尽管这样,我们还是可以从中知道,耗电的有Screen(屏幕亮屏)、Bluetooth(蓝牙)、Wi-Fi(无线局域网)、Audio(音频播放)、Video(视频播放)、Radio(蜂窝数据网络)、Camera的Flashlight(相机闪光灯)和GPS(全球定位系统)等。

电量杀手简介

Screen

屏幕是非常耗电的一个硬件,不要问我为什么。屏幕主要有LCD和OLED两种。LCD屏幕白色光线从屏幕背后的灯管发出,尽管屏幕显示黑屏,依旧耗电,这种屏幕逐渐被淘汰,如果你翻出个早点的功能机,或许能看到。那么大部分Android手机都是OLED的屏幕,每个像素点都是独立的发光单元,屏幕黑屏时,所有像素都不发光。有必要时,让屏幕息屏很重要,当然手机也有自动息屏的时间设置,这个不太需要我们操心。

Radio数据网络和Wi-Fi无线网络

网络也是非常耗电的,其中又以数据网络的耗电更多于Wi-Fi的耗电。所以请尽量引导用户使用Wi-Fi网络使用app的部分功能,比如下载文件。

GPS

GPS也是很耗电的硬件,所以不要动不动就请求地理位置,GPS平常是要关闭的,除非你在使用定位和导航等功能,这样你的手机续航会更好。

WakeLock

如果使用了WakeLock,是可以有效防止息屏情况下的CPU休眠,但是如果不用了,你不释放掉锁的话,则会带来很大的电量的开销。

查看手机耗电的历史记录
// 上次拔掉电源到现在的耗电情况
adb shell dumpsys batterystats --unplugged

你在逗我?让我看命令行的输出?后面我们来使用Battery Historian的图表进行分析。

使用Battery Historian分析手机耗电量

安装Docker

Docker下载网址 https://docs.docker.com/desktop/install/mac-install/

使用Docker容器编排

docker run -p 9999:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999

获取bugreport文件

Android7.0及以上

adb bugreport bugreport.zip

Android6.0及以下

adb bugreport > bugreport.txt

上传bugreport文件进行分析

在浏览器地址栏输入http://localhost:9999
截屏2023-02-05 05.39.12.png
点击Browse按钮并上传bugreport.zip或bugreport.txt生成分析图表。
截屏2023-02-05 05.44.59.png
我们可以通过时间轴来分析应用当下的电池使用情况,比较耗电的是哪部分硬件。

使用JobScheduler来合理执行后台任务

JobScheduler是Android5.0版本推出的API,允许开发者在符合某些条件时创建执行在后台的任务。比如接通电源的情况下才执行某些耗电量大的操作,也可以把一些不紧急的任务在合适的时候批量处理,还可以避开低电量的情况下执行某些任务。

谨慎使用加入电池使用白名单

各个品牌的手机都有加入到电池使用白名单的设置的,需要用户手动开启,但是这势必会大大加大电量的开销。所以,没有必要就不要乱申请白名单了。

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

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

相关文章

Ambient Diffusion: Learning Clean Distributions from Corrupted Data

我们采用以下六个标准,用于对从损坏数据中学习的领域的研究进行分类: **学习范式:**该标准区分模型如何从数据中学习: 监督学习,如 Noise2Noise [39] 所示,涉及在损坏和干净图像对上训练模型。这种方法需要访问干净的数据,这可能并不总是可行的。无监督学习方法,如 Amb…

用户定制应用顺序

经常会有这样的个性化需求&#xff0c;用户希望可以在页面上按自己的偏好拖放移动应用图标&#xff0c;而且还能保存&#xff0c;下次访问该页面时应用图标就是按自己上次保存的顺序展示的。 拖放是一种常见的特性&#xff0c;即抓取对象后移动到另一个位置后放下。在 HTML5 中…

CentOS 7基础操作10_Linux备份与恢复文档

在Linux 操作系统中&#xff0c;最简单的文件和目录备份工具就是cp (复制&#xff09;命令&#xff0c;但是当需要备份的文件、目录数量较多时&#xff0c;仅仅使用cp 命令就显得“力不从心”&#xff0c;并且备份的文件数量及其所占用的磁盘空间都可能会对服务器产生不小的压力…

PPT设置为本框的默认格式以及固定文本框

调整文本框固定位置 双击文本框之后勾选如下三个位置 设置文本框为默认 在调整好文本框的基本性质后&#xff0c;设置为默认即可

python-验证子串

题目描述 输入两个字符串&#xff0c;验证其中一个串是否为另一个串的子串。 输入两个字符串&#xff0c; 每个字符串占一行&#xff0c;长度不超过200且不含空格。 输出 若第一个串s1是第二个串s2的子串&#xff0c;则输出(s1) is substring of(s2)否则&#xff0c;若第二个串…

什么是实际嵌入表示和虚拟嵌入表示?

在知识图谱中&#xff0c;实体和关系通常被表示为向量空间中的点或向量&#xff0c;这些向量被称为嵌入表示。嵌入表示的目的是将实体和关系映射到连续的向量空间中&#xff0c;以便计算机可以更好地理解它们之间的语义关系。在这种情况下&#xff0c;可以将嵌入表示分为实际嵌…

pgvector v0.7.0 的新增功能

现实世界的嵌入数据集通常包含隐藏在向量空间中的冗余。例如&#xff0c;当向量聚集在多维空间中的某些中心点周围时&#xff0c;它会揭示一个可利用的结构。通过减少这种冗余&#xff0c;我们可以在对精度影响最小的情况下节省内存和性能。自 0.7.0 版以来&#xff0c;pgvecto…

【原创】win虚拟机克隆,没有esxi、VMware、Hyper-V和VirtualBox,只知道win系统的账号和密码能不能把系统克隆出来

迁移 Windows 系统的虚拟机(Virtual Machine, VM)涉及几个步骤,以确保虚拟机在迁移后能够正常工作。以下是迁移过程的一般步骤: 1. 准备工作 备份数据:在迁移之前,确保已经备份了虚拟机内的重要数据,以防迁移过程中出现意外情况。检查兼容性:确保目标主机的虚拟化平台…

Linux环境下安装MySQL详细教程(手把手附图安装!!!)

目录 一、前言 二、安装前的环境检查 三、下载官方的 MySQL 安装包 四、开始安装 MySQL 五、尝试初次启动 MySQL 六、给MySQL 做一些简单的小配置 七、共勉 一、前言 本次专题将带大家进入一个新的专题 ---- MySQL。作为本次专题的第一篇博客&#xff0c;肯定是带大家一起…

Jetson Orin Nano v6.0 + tensorflow2.15.0+nv24.05 GPU版本安装

Jetson Orin Nano v6.0 tensorflow2.15.0nv24.05 GPU版本安装 1. 源由2. 步骤2.1 Step1&#xff1a;系统安装2.2 Step2: nvidia-jetpack安装2.3 Step3&#xff1a;jtop安装2.4 Step4&#xff1a;h5py安装2.5 Step5&#xff1a;tensorflow安装2.6 Step6&#xff1a;jupyterlab安…

Golang——RPC

一. RPC简介 远程过程调用(Remote Procedure Call&#xff0c;RPC)是一个计算机通信协议。该协议运行运行于一台计算机的程序调用另外一台计算机的子程序&#xff0c;而程序员无需额外的为这个交互作用编程。如果涉及的软件采用面向对象编程&#xff0c;那么远程过程调用亦可称…

Thesios: Synthesizing Accurate Counterfactual I/O Traces from I/O Samples——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 在设计大规模分布式存储系统时&#xff0c;I/O活动的建模至关重要。具有代表性的/O跟踪&#xff0c;可以对现有硬件、配置和策略进行详细的性能评估。假设跟踪进一步支持分析假设情况&#xff0c;例如部署新的存储硬件、更改配置和修…

QT解析JSON格式超简单

目录 还是从最基础开始、什么是JSON 一、只解析json 1..解析JSON的主要类 2.主函数 二、解析并利用结构体存储 1.定义结构体 2.从 JSON 解析并填充结构体 实战示例 还是从最基础开始、什么是JSON JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数…

2.4 OpenCV随手简记(五)

一、图像翻转 第一个图像翻转&#xff0c;这个可是制作表情包的利器。 图像翻转在 OpenCV 中调用函数 flip() 实现&#xff0c;原函数如下&#xff1a; flip(src, flipCode, dstNone) src&#xff1a;原始图像。 flipCode&#xff1a;翻转方向&#xff0c; 如果 flipCode 为…

【前端面试常见问题】防抖(Debounce)与节流(Throttle)

目录 一、概念阐释 1. 防抖(Debounce) 2. 节流(Throttle) 二、实现方法 防抖函数的实现 节流函数的实现 三、区别与选择 四、面试技巧 在前端开发领域&#xff0c;性能优化是一个永恒的话题&#xff0c;尤其是在处理高频率触发的事件时&#xff0c;如窗口的resize、scroll事…

[Redis]List类型

列表类型来存储多个有序的字符串&#xff0c;a、b、c、d、e 五个元素从左到右组成了一个有序的列表&#xff0c;列表中的每个字符串称为元素&#xff0c;一个列表最多可以存储个元素。在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&#xff08…

Element UI:高效的 Vue.js 组件库

Element UI&#xff1a;高效的 Vue.js 组件库 Element UI 是由饿了么前端团队开发的一个基于 Vue.js 的桌面端组件库。自从发布以来&#xff0c;Element UI 因其高质量的设计、丰富的功能和易于使用的特性&#xff0c;迅速成为 Vue.js 开发者中最受欢迎的 UI 框架之一。本文将…

【动手学深度学习】多层感知机之权重衰减研究详情

目录 &#x1f30a;1. 研究目的 &#x1f30a;2. 研究准备 &#x1f30a;3. 研究内容 &#x1f30d;3.1 多层感知机权重衰减 &#x1f30d;3.2 基础练习 &#x1f30a;4. 研究体会 &#x1f30a;1. 研究目的 防止过拟合&#xff1a;权重衰减和暂退法都是用来控制模型的复…

五年制转本中比较难考的几个专业

五年制转本中比较难考的几个专业&#xff0c;你们知道吗&#xff1f;第一个就是医学类相关专业&#xff0c;医学界都流传着一句话&#xff0c;劝人学医&#xff0c;天打雷劈&#xff0c;想必大家都有所耳闻。并且大家在选专业的时候&#xff0c;都会有人告诉你&#xff0c;千万…

北大、腾讯强推!DynamiCrafter WebUI 在线教程,无需逐帧记录即可图片变视频

从史前时期开始&#xff0c;人类的祖先就曾以石为笔&#xff0c;在洞穴的石壁描绘出一系列野牛奔跑的分析图&#xff0c;壁画上的动物被叠加了多条腿&#xff0c;用来表现连贯的动作&#xff0c;这或许便是动态视频的最早雏形。 被焚之城的山羊陶碗 时光流转&#xff0c;最初&…