欢迎来到天天文库
浏览记录
ID:5331473
大小:214.96 KB
页数:6页
时间:2017-12-08
《有效控制android应用程序的耗电量》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、有效控制Android应用程序的耗电量首先我们来看看Android手机的电量都主要消耗在了什么地方:显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。简单的说也就是主要在以下情况下耗电比较多:1、大数据量的传输。2、不停的在网络间切换。3、解析大量的文本数据。那么我们怎么样来改善一下我们的程序呢?1、在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序。检查网络连接的方法如下:12ConnectivityManagermConnectivity;34TelephonyMa
2、nagermTelephony;56……78//检查网络连接,如果无网络可用,就不需要进行连网操作等910NetworkInfoinfo=mConnectivity.getActiveNetworkInfo();1112if(info==null
3、
4、1314!mConnectivity.getBackgroundDataSetting()){1516returnfalse;1718}1920//判断网络连接类型,只有在3G或wifi里进行一些数据更新。2122intnetType=info.getType();2324in
5、tnetSubtype=info.getSubtype();2526if(netType==ConnectivityManager.TYPE_WIFI){2728returninfo.isConnected();2930}elseif(netType==ConnectivityManager.TYPE_MOBILE3132&&netSubtype==TelephonyManager.NETWORK_TYPE_UMTS3334&&!mTelephony.isNetworkRoaming()){3536returninfo.i
6、sConnected();3738}else{3940returnfalse;4142}432、使用效率高的数据格式和解析方法。通过测试发现,目前主流的数据格式,使用树形解析(如DOM)和流的方式解析(SAX)对比情况如下图所示:很明显,使用流的方式解析效率要高一些,因为DOM解析是在对整个文档读取完后,再根据节点层次等再组织起来。而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是Google提出的,
7、一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。有兴趣的可以到官方去看看更多的信息。从上面的图中我们可以得出结论就是尽量使用SAX等边读取边解析的方式来解析数据,针对移动设备,最好能使用JSON之类的轻量级数据格式为佳。3、目前大部门网站都支持GZIP压缩,所以在进行大数据量下载时,尽量使用GZIP方式下载。使用方法如下所示:4445importjava.util.zip.GZIPInputStream;4647HttpGetrequest=4849newHttpGet("http://ex
8、ample.com/gzipcontent");5051HttpResponseresp=5253newDefaultHttpClient().execute(request);5455HttpEntityentity=response.getEntity();5657InputStreamcompressed=entity.getContent();5859InputStreamrawData=newGZIPInputStream(compressed);60使用GZIP压缩方式下载数据,能减少网络流量,下图为使用GZI
9、P方式获取包含1800个主题的RSS对比情况。4、其它一些优化方法:回收java对象,特别是较大的java对像61XmlPullParserFactoryandBitmapFactory6263Matcher.reset(newString)forregex6465StringBuilder.sentLength(0)66对定位要求不是太高的话尽量不要使用GPS定位,可能使用wifi和移动网络cell定位即可。GPS定位消耗的电量远远高于移动网络定位。尽量不要使用浮点运算。获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次
10、请求。很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。67AlarmManageram=(AlarmManager)6869cont
此文档下载收益归作者所有