Android 电量优化概览

目录

一、三大耗电模块

二、显示

2.1 Overdraw简介

2.2 Overdraw检测

2.3 UI优化优化

三、网络

3.1 移动网络

3.2 Wi-Fi

3.3 网络优化

四、CPU

4.1 变频

4.2 CPU优化

4.2.1 计算优化

4.2.2 避免WakeLock使用不当

4.2.3 避免Alarm Manager使用不当

4.2.4 使用Job Scheduler(WorkManager)

五、其他

5.1 GPS优化

5.2 精简冗余的服务(Service), 避免长时间执行耗电操作。

5.3 避免与服务器建立长连接。

5.4 减少 CPU 资源使用(滑动或动画)。

5.5 减少 View 的 background 使用,特别是不明显的 background。增加性能、也减少功耗。


一、三大耗电模块

  • 1.显示

  • 2.网络

  • 3.CPU

二、显示

  • 避免时常唤醒屏幕

  • 不要阻止手机休眠

  • 过度绘制

2.1 Overdraw简介

        Overdraw就是过度绘制,是指在一帧的时间内(16.67ms)像素被绘制了多次,理论上一个像素每次只绘制一次是最优的,但是由于重叠的布 局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,当这个操作耗时超过16.67ms时,就会出现掉帧现象,表现为应用卡顿,所以对重叠不可见元素的重复绘制会产生额外的开销,需要尽量减少Overdraw的发生。

2.2 Overdraw检测

        Android提供了测量Overdraw的选项,在开发者选项-调试GPU过度绘制(Show GPU Overdraw),打开选项就可以看到当前页面Overdraw的状态,就可以观察屏幕的绘制状态。该工具会使用三种不同的颜色绘制屏幕,来指示 overdraw发生在哪里以及程度如何,其中:

  • 没有颜色: 意味着没有overdraw。像素只画了一次。

  • 蓝色: 意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。

  • 绿色: 意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。

  • 浅红: 意味着overdraw 3倍。像素绘制了四次,小范围可以接受。

  • 暗红: 意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。

2.3 UI优化优化

  • 1.使用RelativeLayout和ConstraintLayout减少层级嵌套。

  • 2.去掉Window的默认背景。

  • 3.去掉其他不必要的背景。

  • 4.自定义View处理。

  • 5.ViewStub高效占位符。

  • 6.Merge。

三、网络

  • 大数据量的网络传输

  • 不停的网络切换

3.1 移动网络

  • Full power: 能量最高的状态,移动网络连接被激活,允许设备以最大的传输速率进行操作。

  • Low power:一种中间状态,对电量的消耗差不多是Full power状态下的50%。

  • Standby: 最低的状态,没有数据连接需要传输,电量消耗最少。

3.2 Wi-Fi

  • 在理想情况下,吞吐量大,延迟低,通常是不计费。

通常情况下,使用Wi-Fi连接网络的功耗要低于移动网络。所以大数据量的网络传输(例如版本升级等使用WiFi更好)

3.3 网络优化

  • 1.网络请求之前,检查网络连接。没有网络连接不进行请求。

  • 2.判断网络类型,针对特定的数据在特定的网络下请求。例如:大量数据传输的时候,在wifi下请求。wifi下下载数据耗电量只有2、3、4、5G的1/3。

  • 3.界面展示的数据非Wi-Fi下不预取。

  • 4.使用效率高的解析工具。根据具体业务数据量的大小,选择合适的解析工具。例如Android上面的协议解析一般推荐json。

  • 5.使用GZIP压缩方式下载数据,能减少网络流量,缩短下载时间。

  • 6.合理使用缓存,避免重复操作。

  • 7.使用推送,代替循环请求。

  • 8.触发网络请求的操作,每次都会保持无线信号持续一段时间,我们可以把零散的网络请求打包进行一次操作,避免过多的无线信号引起的电量消耗。

  • 9.实时的信息上报后台运行时改成非实时上报。

  • 10.合并网络请求,减少请求次数。

  • 11.尽量利用Wi-Fi传输信息。

四、CPU

  • CPU频率
    • CPU频率表示CPU的计算能力,频率决定CPU周期,互为倒数,CPU主频越快,耗时越短。

  • CPU时间片
    • 在计算机中,每隔N个高电频脉冲,时钟计算器加1,可以把自然时间分成固定的小块这个就是。

    • 时间片:CPU时间片「10ms」 单位是jiffies。

  • CPU利用率
    • CPU分「用户态,系统态,空闲态」,利用率 = (执行用户态 + 系统态的jiffies )/ 总jiffies。

4.1 变频

  • Ondemand:官方内核默认使用这种调速器,规则是有高需求,迅速跳到最大频率,有低需求时迅速降到最小频率。

  • Conservative:规则是慢升快降,注重省电,有高需求,逐渐提高频率,有低需求时,迅速跳到最小频率。

  • Interactive:规则是快升慢降,有高需求,逐渐提高频率,有低需求时,逐渐减低频率Lulzactive:根据负载逐级升高或者降低频率。

  • Powersave:把频率锁定在设定范围的最小值,负载再高也不升高频率,很省电。

  • Performance:把频率锁定在设定范围的最大值,无论负载如何,CPU都全速运行,很费电。

注: CPU的频率高才越耗电

4.2 CPU优化

  • 计算优化;

  • 避免WakeLock使用不当;

  • 避免Alarm Manager使用不当;

  • 使用Job Scheduler(WorkManager)。

4.2.1 计算优化

  • 尽量避开浮点运算

  • 除法变乘法

  • 充分利用位移(源码中有大量位移运算)

  • 查表法,直接使用映射关系,但会增加内存,视具体场景来定

  • 利用arm neon指令集做并行运算,需要ARM V7及以上架构CPU才能支持

4.2.2 避免WakeLock使用不当

WakeLock策略

  • PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

  • SCREEN_DIM_WAKE LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯。

  • SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,允许关闭键盘灯。

  • FULL_WAKE_LOCK: 保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度。

  • ACOUIRE CAUSES WAKEUP:不会唤醒设备,强制屏幕马上高亮显示,键盘灯开启。有一个例外,如果有notification弹出的话,会唤醒设备。

  • ON_AFTER_RELEASE: WakeLock 被释放后,维持屏幕亮度一小段时间,减少WakeLock 循环时的闪烁情况。

4.2.3 避免Alarm Manager使用不当

  • ELAPSED REALTIME: 在多少 ms 后呼叫指定的 PendingIntent。若当时手机处于休眠,会延迟到手机醒来时(屏幕可能还是关的)才做。

  • 「ELAPSED REALTIME WAKEUP」:在多少 ms 后呼叫指定的 PendingIntent。若当时手机处于休眠,会唤醒手机做事,同时休眠期间被延迟的事也会一起执行。「是最常见的耗电凶手」

  • RTC:在指定的某段时间做事。若当时手机处于休眠,会延迟到手机醒来时 (屏幕可能还是关的)才做。

  • 「RITC WAKEUP」:在指定的某段时间做事。若当时手机处于休眠,「会唤醒手机做事」,同时休眠期间被延迟的事也会一起执行。通常用于闹钟、记事提醒等。

Alarm能不用最好不用。
ELAPSED_REALTIME_WAKEUP是精准闹钟,能不用最好不用。 

4.2.4 使用Job Scheduler(WorkManager)

  • 重要不紧急的任务,可以延迟执行,如定期数据库更新和数据上报。

  • 耗电量较大的任务,比如充电时才希望执行备份数据操作。

  • 不紧急可以不执行的网络任务,如在Wi-Fi环境预加载数据。

  • 可以批量执行的任务。

五、其他

5.1 GPS优化

  • 精准度要求不高 不用需要开启GPS,蜂窝无线提供的数据足以

  • 避免在信号弱(地下室)开启GPS

5.2 精简冗余的服务(Service), 避免长时间执行耗电操作。

5.3 避免与服务器建立长连接。

5.4 减少 CPU 资源使用(滑动或动画)。

5.5 减少 View 的 background 使用,特别是不明显的 background。增加性能、也减少功耗。

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

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

相关文章

[github初学者教程] 分支管理-以及问题解决

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于新西兰奥克兰大学攻读IT硕士学位。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。跨领域…

QT中使用unity

qt把unity发入widget中 头文件showunitywindowsinqt #ifndef SHOWUNITYWINDOWSINQT_H #define SHOWUNITYWINDOWSINQT_H #include <QObject> #include <QProcess> #include <windows.h> #include <winuser.h> #include <QDebug> class ShowUnity…

工作记录---为什么双11当天不能申请退款?(有趣~)

为什么&#xff1f; 服务降级了 服务降级&#xff1a; 当服务器压力剧增的情况下&#xff0c;根据实际业务情况及流量&#xff0c;对一些服务和页面有策略的不处理或换种简单的方式处理&#xff0c;从而释放服务器资源以保证核心交易正常运作或高效运作。 分布式系统的降级…

用Java实现贪吃蛇小游戏

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为贪吃蛇。 其次在贪吃蛇项目下创建一个名为images的文件夹用来存放游戏相关图片。 然后再在项目的src文件下创建一个com.xxx.view的包用来存放所有的图形界面类&#xff0c;创建一个com.xxx.controller的包用来存放启…

基于AVR单片机的心电信号获取与分析

基于AVR单片机的心电信号获取与分析是一项常见的生物医学工程应用&#xff0c;用于监测和分析人体的心脏活动。本文将介绍基于AVR单片机的心电信号获取与分析的原理和设计&#xff0c;并提供相应的代码示例。 1. 概述 心电信号是记录和分析心脏电活动的重要手段。AVR单片机是…

04.webpack中css的压缩和抽离

1.抽离css文件 利用mini-css-extract-plugin插件&#xff0c;替代style-loader const MiniCssExtractPlugin require(mini-css-extract-plugin) module.exports smart(webpackCommonConf, {mode: production,output: {// filename: bundle.[contentHash:8].js, // 打包代码…

Oracle Data Redaction和Oracle Data Pump

本实验的使用环境基于之前的博客&#xff1a;一个简单的Oracle Redaction实验 本实验参考文档为15.14 Oracle Data Redaction and Oracle Data Pump 先创建directory并赋权&#xff1a; -- connect to database or pluggable database alter session set containerorclpdb1;…

mysql 中with的用法(3)

有表&#xff08;tb&#xff09;,数据如下&#xff1a; 请用SQL,生成如下的样式&#xff1a; 一、建表 CREATE TABLE tb (id varchar(3) DEFAULT NULL,pid varchar(3) DEFAULT NULL,name varchar(64) DEFAULT NULL ) INSERT INTO tb (id, pid, name) VALUES(002, 0, 浙江省)…

docker更换国内源

docker更换国内源 1、编辑Docker配置文件 在终端中执行以下命令&#xff0c;编辑Docker配置文件&#xff1a; vi /etc/docker/daemon.json2、添加更新源 在打开的配置文件中&#xff0c;添加以下内容&#xff1a; {"registry-mirrors": ["https://hub-mirror…

Chrome中设置安全来源域名

目的&#xff1a; 使得本地映射的域名能被浏览器安全访问&#xff0c;允许调用设备资源 步骤&#xff1a; 在Chrome中导航栏打开 chrome://flags/#unsafely-treat-insecure-origin-as-secure 填入hosts域名&#xff1a;如 http://h5-twzc003.local.com 参考&#xff1a; h…

赴日开发工程师是做什么的?

日本的软件开发岗位对技术要求和沟通能力都有较高的要求&#xff0c;赴日开发工程师主要负责软件设计、开发和测试&#xff0c;包括编写代码、测试代码和修复漏洞等工作。开发人员必须对软件架构、设计模式和业务逻辑有深入的理解&#xff0c;并能做出合适的技术决策。 当然&a…

时间序列与 Statsmodels:预测所需的基本概念(1)

后文&#xff1a;时间序列与 statsmodels&#xff1a;预测所需的基本概念&#xff08;2&#xff09;-CSDN博客 一、说明 本博客解释了理解时间序列的基本概念&#xff1a;趋势、季节性、白噪声、平稳性&#xff0c;并使用自回归、差分和移动平均参数进行预测示例。这是理解任何…

江湖再见,机器视觉兄弟们,我已经提离职了,聪明的机器视觉工程师,离职不亏本!

我闻江湖已叹息&#xff0c;又闻人间繁闹闹。同为布衣沦落人&#xff0c;相逢何必曾相识。 此生谁料事事休&#xff0c;道不尽人情冷暖&#xff0c;聚散离合总平常&#xff0c;不似勇气少年时。 我估计今年公司年底是发不出工资了&#xff0c;因为订单续不上。年终奖更是没有&…

鸢尾花分类

第1关&#xff1a;什么是决策树 1.AB 2.B 第2关&#xff1a;信息熵与信息增益 import numpy as npdef calcInfoGain(feature, label, index):计算信息增益:param feature:测试用例中字典里的feature&#xff0c;类型为ndarray:param label:测试用例中字典里的label&#xf…

Android 弹出自定义对话框

Android在任意Activity界面弹出一个自定义的对话框&#xff0c;效果如下图所示: 准备一张小图片&#xff0c;右上角的小X图标64*64&#xff0c;close_icon.png&#xff0c;随便找个小图片代替&#xff1b; 第一步&#xff1a;样式添加&#xff0c;注意&#xff1a;默认在value…

Go 内存分配:结构体中的优化技巧

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 在使用Golang进行内存分配时&#xff0c;我们需要遵循一系列规则。在深入了解这些规则之前&#xff0c;我们需要先了解变量的对齐…

通过微软MediaCreationTool制作Win10系统安装U盘,安装纯净版Win10的通用教程

最近新入手了一台Lenovo的入门级主机。 为了避免以后忘记装机步骤&#xff0c;特写下此博客记录。 装机步骤是在Lenovo网站上看的&#xff0c;在这表示感谢。 https://iknow.lenovo.com.cn/detail/177365

Ubuntu下发送邮件

mail命令在Ubuntu下是需要安装的&#xff0c;使用下条命令进行安装&#xff1a; sudo apt-get install heirloom-mailx 接下来输入用户密码&#xff0c;等待安装完成 此时还不能发送外部服务器邮件&#xff0c;需要完成以下配置&#xff0c;修改/etc/nail.rc或者/etc/s-nail.…

(十二)Flask重点之session

session 自我介绍&基本使用&#xff1a; 在Flask中&#xff0c;Session是一种用于在客户端和服务器之间存储和传输数据的机制。它允许您在用户与应用程序之间保持状态&#xff0c;并且可以存储和检索有关特定用户的信息。 Flask使用Werkzeug库提供的SecureCookie来实现S…

LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve

接着前面的Langchain&#xff0c;继续实现读取YouTube的视频脚本来问答Indexes for information retrieve LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗…