Android 应用开发的耗电量控制


对于移动平台来说,设备电量有限一直是制约其发展的一个重要因素,作为开发者,功能实现虽然优先级高,但是开发过程中,针对耗电量进行优化也是应该牢记在心的,毕竟一款优质的App在耗电量方面也必须让广大用户满意,这是一篇我认为不错的文章,转载来进行分享,让我们都来节能环保,如果我们的App用户量巨大,哪怕我们对节电这一块而做出一点点的优化,那将省了多少人的电啊,这绝对是一场巨大的节能运动,是吧?



显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。

简单的说也就是主要在以下情况下耗电比较多:

1、 大数据量的传输。

2、 不停的在网络间切换。

3、 解析大量的文本数据。

那么我们怎么样来改善一下我们的程序呢?

1、在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序。

Java代码:
  1. ConnectivityManager mConnectivity; 
  2. TelephonyManager mTelephony; 

  3. …… 
  4. // 检查网络连接,如果无网络可用,就不需要进行连网操作等 
  5. NetworkInfo info = mConnectivity.getActiveNetworkInfo(); 

  6. if (info == null || !mConnectivity.getBackgroundDataSetting())

  7. return false; 


  8. //判断网络连接类型,只有在3G或wifi里进行一些数据更新。 
  9. int netType = info.getType(); 
  10. int netSubtype = info.getSubtype(); 

  11. if (netType == ConnectivityManager.TYPE_WIFI) 

  12. return info.isConnected(); 
  13. }

  14. else if (netType == ConnectivityManager.TYPE_MOBILE && netSubtype ==TelephonyManager.NETWORK_TYPE_UMTS && !mTelephony.isNetworkRoaming())

  15. return info.isConnected(); 


  16. else 

  17. return false; 
  18. }
复制代码
2、 使用效率高的数据格式和解析方法。

通过测试发现,目前主流的数据格式,使用树形解析(如DOM)和流的方式解析(SAX)对比情况如下图所示:

很明显,使用流的方式解析效率要高一些,因为DOM解析是在对整个文档读取完后,再根据节点层次等再组织起来。而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。

在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是Google提出的,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。

从上面的图中我们可以得出结论就是尽量使用SAX等边读取边解析的方式来解析数据,针对移动设备,最好能使用JSON之类的轻量级数据格式为佳。


3、 使用GZIP压缩方式下载数据,能减少网络流量,下图为使用GZIP方式获取包含1800个主题的RSS对比情况。

Java代码:
  1. import java.util.zip.GZIPInputStream; 

  2. HttpGet request = new HttpGet("http://example.com/gzipcontent"); 

  3. HttpResponse resp = new DefaultHttpClient().execute(request); 

  4. HttpEntity entity = response.getEntity(); 

  5. InputStream compressed = entity.getContent(); 

  6. InputStream rawData = new GZIPInputStream(compressed);
复制代码
目前大部门网站都支持GZIP压缩,所以在进行大数据量下载时,尽量使用GZIP方式下载。


4、 其它一些优化方法:

回收java对象,特别是较大的java对像
  1. XmlPullParserFactory and BitmapFactory   

  2. Matcher.reset(newString) for regex  

  3. StringBuilder.sentLength(0)
复制代码
对定位要求不是太高的话尽量不要使用GPS定位,可能使用wifi和移动网络cell定位即可。 GPS定位消耗的电量远远高于移动网络定位。

尽量不要使用浮点运算。

获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次请求。

很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。
  1. AlarmManager am = (AlarmManager)  

  2.         context.getSystemService(Context.ALARM_SERVICE);  

  3. Intent intent = new Intent(context, MyService.class);  

  4. PendingIntent pendingIntent =  

  5.         PendingIntent.getService(context, 0, intent, 0);  

  6. long interval = DateUtils.MINUTE_IN_MILLIS * 30;  

  7. long firstWake = System.currentTimeMillis() + interval;  

  8. am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);
复制代码
最后一招,在运行你的程序前先检查电量,电量太低,那么就提示用户充电之类的,使用方法:
  1. public void onCreate() {  

  2.     // Register for sticky broadcast and send default  

  3.     registerReceiver(mReceiver, mFilter);  

  4.     mHandler.sendEmptyMessageDelayed(MSG_BATT, 1000);  

  5. }  

  6. IntentFilter mFilter =  

  7.         new IntentFilter(Intent.ACTION_BATTERY_CHANGED);  

  8. BroadcastReceiver mReceiver = new BroadcastReceiver() {  

  9.     public void onReceive(Context context, Intent intent) {  

  10.         // Found sticky broadcast, so trigger update  

  11.         unregisterReceiver(mReceiver);  

  12.         mHandler.removeMessages(MSG_BATT);  

  13.         mHandler.obtainMessage(MSG_BATT, intent).sendToTarget();  

  14.     }  

  15. };  

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

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

相关文章

使用Batterystats和Battery Historian进行耗电检测

本文主要介绍Batterystats和Battery Historian的基本使用步骤和工作流程,如果您要想学习怎样使用Battery Historian分析耗电详情,请参考文档: Analyze power use with Battery Historian。 Batterystats是一个Android framework中的工具&…

APP-耗电量测试-battery-historian-master

这里主要是比较简单的Battery historian的操作,这个脚本文件只能用在python2版本,python3会语法报错 1.首先要下载并且解压historian的压缩包文件 battery-historian-master.zip Github下载地址 2.然后用adb命令开始操作手机 首先是清除测试前电量的数据 adb she…

Android App 耗电量分析-1

分为新老两个版本的SDK-TOOL,新版的放在另外一篇博客 Android App 电量分析https://blog.csdn.net/kan137g/article/details/84886277 耗电操作主要分为下面几种 高频通信CPU密集型的计算传感器 频繁唤醒系统 解决方案 -减少:您的应用可以裁剪多少操…

耗电优化(上):Android App 耗电分析

这里写目录标题 1. 电量和硬件1.1 App 通过使用硬件模块消耗相应的电能1.2 资源调度机制是厂商功耗优化最重要的手段 2. 电量和应用程序2.1 评估不同应用程序的耗电情况结论:把电量的测量转化为功能模块的使用时间或者次数 2.2 尽可能准确的测量电量bug report结合 …

图文结合,教您如何使用Trepn Profiler测试手机应用的耗电量

摘要:Trepn Profiler 可以帮助准确分析手机应用耗电情况的Android应用,可以测量很多与电池有关的数据,本文将结合图文,详细讲解如何操作。 Trepn Profiler 是一款帮助准确分析手机应用耗电情况的Android应用,可以测量很…

本地部署 ChatGLM-6B

本地部署 ChatGLM-6B 1. 什么是 ChatGLM-6B2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 ChatGLM-6B6. 启动 ChatGLM-6B7. 访问 ChatGLM-6B8. API部署9. 命令行部署10. 其他,修改使用显存大小11. ChatGLM-6B 的推理参数含义 1. 什么是 ChatGLM-6B Chat…

文心:PPT 制作、数字人主播一键开播等应用场景惊艳到我了,下面给到Prompt工程详细教程应用场景及案例

文心:PPT 制作、数字人主播一键开播等应用场景惊艳到我了,下面给到Prompt工程详细教程应用场景及案例 1.文心千帆简介 文心千帆优势 基础强大、知识丰富 文心千帆平台基于百度智能云,采用飞桨深度学习框架作为底层支撑,并内置文心…

【SQLAlchemy】第二篇——连接失效及连接池

一、背景 为了节约资源,MySQL会对建立的连接进行监控,当某些连接处于不活跃状态的时间超过一个阈值时,则关闭它们。 用户可以执行show variables like %wait_timeout%;来查看这个阈值: 可以看到,在默认的情况下&…

一个程序员的意想流

Readme:记录生活、工作、学习中自己的思考和想法,但是可能很杂乱的。目的为了提升自己BB的能力。 2023.3.9: 作为一个嵌入式(底层)开发者,通过对Linux内核的不断深入,包括VFS、内存管理、进程管…

ChatGPT提示词工程师 | prompt engineering | 吴恩达教你写提示词 课程笔记

Lecture1 引言 两种大语言模型(LLMs,Large Language Models): Base LLM: Predicts next word, based on text training dataInstruction Tuned LLM: Tries to follow instructions Lecture2 指南 使用C…

chatgpt提示词学习指南,提示词工程,提示词汇总

这篇gpt提示词指南我会随着我的学习一直更新。 结构 好的提示词角色(能力)上下文详细的指令说明风格输出格式 角色(必填):可以给模型提供特定的能力,让它更好的解决我们的问题,在声明角色后,…

股票入门基础知识之投资家有哪些?股票入门基础知识中的投资角色

《量化分析海龟训练营》课程学员:一般来说哪些人投资做得好呢? 同济桥博士:投资是一门科学,有很多研究投资的人拿到过诺贝尔经济学奖,投资做得好有五类人:科学家、哲学家、神学家、交易员、民间高手。最后…

投资理财启蒙之理财入门必看?

投资基金股票是怎么赚钱的 ? 公司上市就是为了融资扩大规模,需要在上海/深圳证券交易所去审批,现在国家注册制落实后,现在企业要上市很严格的需要公开公司的各方面情况的 ,投资渠道也正规,比如支付宝/微信&…

金融业务知识(2):股票交易的基本流程

股票交易的基本流程 (一)开户 需要开立证券账户和资金账户 证券账户用来记载投资者所持有的证券种类、数量和相应的变动情况 资金账户则用来记载和反映投资者买卖证券的货币收付和结存数额。 开立证券账户和资金账户后,投资者买卖证券所涉…

基金投资入门3:中外常见金融指数类型说明

在每天的新闻及财经类文章中,经常听到当日的上证综指、深证成指、沪深300指数是多少点、涨跌幅是多少。 大家潜意识中认为指数点、涨跌幅越高越好,至于各指数代表的是什么意思并不清楚,但是对于刚接触投资理财的朋友,只有搞懂各指…

最新FRM一级二级handbook官方教材原版书

最新FRM一级二级教材囊括了FRM考试需要掌握的所有要点和难点,并进行了深入细致地讲解。本教材紧扣GARP协会新版教材的章节编排,加入了编著者多本同类教材的编写经验和一线教学经验的总结,并关注了国际国内**的风控热点。

证券交易金融知识学习(1)

学习目标: 需要做一些关于投资交易软件的测试,需要了解操作背后的交易意义,需要学习一些金融基础知识。本人是金融证券交易的小白,从0开始学习。故记录一些金融知识学习的笔记,比较零散,目的是为了让自己复…

【转】投资从入门到精通,七本经典书籍

http://www.create.hk/archives/158 随着我国股市的复苏、资本市场的规律,却去研究一些“技术分析”之类的理论,是不科学的。“技术分析”属于玄学,也就是形而上学。目前在我国东部沿海地区,由于投资者知识和经验的日益增多&…

投资学翻译1

生产网络与股票回报:垂直创造性破坏的作用 本文从实证和理论两方面研究了生产网络中企业风险与企业与消费者距离之间的关系。我们记录了两个新事实:离消费者越远的企业,其风险溢价越高,对总生产率的影响也越大。我们用一个具有多层生产过程的一般均衡模…