如何有效控制Androidwin32控制台应用程序序的耗电量

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!转自 http://kb.cnblogs.com/page/77741/
在对尚邮架构师的访谈中曾经探讨过移动开发是否要重视移动终端软件的耗电问题,答案是显而易见的!那么如何才能降低Android应用程序的耗电量呢?今天再一次回顾了一下09年Google IO大会Jeffrey Sharkey的演讲(Coding for Life — Battery Life, That Is),同时也讲一下应该如何有效地控制耗电量问题。
  首先我们来看看Android手机的电量都主要消耗在了什么地方:
  显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。
  简单的说也就是主要在以下情况下耗电比较多:
  1、大数据量的传输。
  2、不停的在网络间切换。
  3、解析大量的文本数据。
  那么我们怎么样来改善一下我们的程序呢?
  1、在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序。
  检查网络连接的方法如下:
ConnectivityManager mC
TelephonyManager mT
检查网络连接,如果无网络可用,就不需要进行连网操作等
NetworkInfo info
mConnectivity.getActiveNetworkInfo();
mConnectivity.getBackgroundDataSetting()) {
判断网络连接类型,只有在3G或wifi里进行一些数据更新。
info.getType();
netSubtype
info.getSubtype();
ConnectivityManager.TYPE_WIFI) {
info.isConnected();
ConnectivityManager.TYPE_MOBILE
netSubtype
TelephonyManager.NETWORK_TYPE_UMTS
mTelephony.isNetworkRoaming()) {
info.isConnected();
  &2、使用效率高的数据格式和解析方法。
  通过测试发现,目前主流的数据格式,使用树形解析(如DOM)和流的方式解析(SAX)对比情况如下图所示:
  很明显,使用流的方式解析效率要高一些,因为DOM解析是在对整个文档读取完后,再根据节点层次等再组织起来。而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。
  在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是Google提出的,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。有兴趣的可以到官方去看看更多的信息。
  从上面的图中我们可以得出结论就是尽量使用SAX等边读取边解析的方式来解析数据,针对移动设备,最好能使用JSON之类的轻量级数据格式为佳。
  3、目前大部门网站都支持GZIP压缩,所以在进行大数据量下载时,尽量使用GZIP方式下载。
  使用方法如下所示:
java.util.zip.GZIPInputS
HttpGet request
http://example.com/gzipcontent
HttpResponse resp
DefaultHttpClient().execute(request);
HttpEntity entity
response.getEntity();
InputStream compressed
entity.getContent();
InputStream rawData
GZIPInputStream(compressed);
  使用GZIP压缩方式下载数据,能减少网络流量,下图为使用GZIP方式获取包含1800个主题的RSS对比情况。
  4、其它一些优化方法:
  回收java对象,特别是较大的java对像
XmlPullParserFactory and BitmapFactory
Matcher.reset(newString)
StringBuilder.sentLength(
  对定位要求不是太高的话尽量不要使用GPS定位,可能使用wifi和移动网络cell定位即可。GPS定位消耗的电量远远高于移动网络定位。
  尽量不要使用浮点运算。
  获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次请求。
  很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。
AlarmManager am
(AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
Intent intent
Intent(context, MyService.
PendingIntent pendingIntent
PendingIntent.getService(context,
DateUtils.MINUTE_IN_MILLIS
System.currentTimeMillis()
am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);
  最后一招,在运行你的程序前先检查电量,电量太低,那么就提示用户充电之类的,使用方法:
onCreate() {
Register for sticky broadcast and send default
registerReceiver(mReceiver, mFilter);
mHandler.sendEmptyMessageDelayed(MSG_BATT,
IntentFilter mFilter
IntentFilter(Intent.ACTION_BATTERY_CHANGED);
BroadcastReceiver mReceiver
BroadcastReceiver() {
onReceive(Context context, Intent intent) {
Found sticky broadcast, so trigger update
unregisterReceiver(mReceiver);
mHandler.removeMessages(MSG_BATT);
mHandler.obtainMessage(MSG_BATT, intent).sendToTarget();
  想了解更多内容,请直接查看
相关标签/搜索有效控制Android应用程序的耗电量 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
有正在从事web测试和APP测试工作或想从事此行业的测友们,欢迎与我联系,相互交流!测试交流微信公众号:gh_03e570cb5168
长期招聘不同级别测试工程师(WEB\APP\性能)有意者请与本人联系!
有效控制Android应用程序的耗电量
& 21:55:04
/ 个人分类:
51CTO在对尚邮架构师的访谈中曾经探讨过移动开发是否要重视移动终端软件的耗电问题,答案是显而易见的!那么如何才能降低应用程序的呢?今天再一次回顾了一下09年 IO大会Jeffrey Sharkey的演讲(Coding for Life — Battery Life, That Is),同时也讲一下应该如何有效地控制耗电量问题。首先我们来看看Android手机的电量都主要消耗在了什么地方:显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。简单的说也就是主要在以下情况下耗电比较多:1、 大数据量的传输。2、 不停的在网络间切换。3、 解析大量的文本数据。那么我们怎么样来改善一下我们的程序呢?1、 在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序。检查网络连接的方法如下:ConnectivityManager mCTelephonyManager mT……// 检查网络连接,如果无网络可用,就不需要进行连网操作等NetworkInfoinfo=mConnectivity.getActiveNetworkInfo();if (info== null ||!mConnectivity.getBackgroundDataSetting()) {}//判断网络连接类型,只有在3G或wifi里进行一些数据更新。intnetType=info.getType();intnetSubtype=info.getSubtype();if (netType== ConnectivityManager.TYPE_WIFI) {return info.isConnected();} else if (netType== ConnectivityManager.TYPE_MOBILE&&netSubtype== TelephonyManager.NETWORK_TYPE_UMTS&& !mTelephony.isNetworkRoaming()) {return info.isConnected();} else {}2、 使用效率高的数据格式和解析方法。通过发现,目前主流的数据格式,使用树形解析(如DOM)和流的方式解析(SAX)对比情况如下图所示:很明显,使用流的方式解析效率要高一些,因为DOM解析是在对整个文档读取完后,再根据节点层次等再组织起来。而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是Google提出的,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。有兴趣的可以到官方去看看。从上面的图中我们可以得出结论就是尽量使用SAX等边读取边解析的方式来解析数据,针对移动设备,最好能使用JSON之类的轻量级数据格式为佳。3、 目前大部门网站都支持GZIP压缩,所以在进行大数据量下载时,尽量使用GZIP方式下载。使用方法如下所示:import .util.zip.GZIPInputSHttpGetrequest=newHttpGet("http://example.com/gzipcontent");HttpResponseresp=newDefaultHttpClient().execute(request);HttpEntityentity=response.getEntity();InputStreamcompressed=entity.getContent();InputStreamrawData=newGZIPInputStream(compressed);使用GZIP压缩方式下载数据,能减少网络流量,下图为使用GZIP方式获取包含1800个主题的RSS对比情况。4、 一些优化方法:回收java对象,特别是较大的java对像XmlPullParserFactory and BitmapFactoryMatcher.reset(newString) for regexStringBuilder.sentLength(0)对定位要求不是太高的话尽量不要使用GPS定位,可能使用wifi和移动网络cell定位即可。GPS定位消耗的电量远远高于移动网络定位。尽量不要使用浮点运算。获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次请求。很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。AlarmManageram= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);Intentintent=newIntent(context, MyService.class);PendingIntentpendingIntent=PendingIntent.getService(context, 0, intent, 0);longinterval=DateUtils.MINUTE_IN_MILLIS * 30;longfirstWake=System.currentTimeMillis() +am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);最后一招,在运行你的程序前先检查电量,电量太低,那么就提示用户充电之类的,使用方法:public void onCreate() {// Register for sticky broadcast and send defaultregisterReceiver(mReceiver, mFilter);mHandler.sendEmptyMessageDelayed(MSG_BATT, 1000);}IntentFiltermFilter=newIntentFilter(Intent.ACTION_BATTERY_CHANGED);BroadcastReceivermReceiver=newBroadcastReceiver() {public void onReceive(Context context, Intent intent) {// Found sticky broadcast, so trigger updateunregisterReceiver(mReceiver);mHandler.removeMessages(MSG_BATT);mHandler.obtainMessage(MSG_BATT, intent).sendToTarget();}};想了解更多内容,请直接查看Google IO 2009相关文档如何降低android应用程序的耗电量_百度知道
如何降低android应用程序的耗电量
我有更好的答案
降低亮度,把后台应用全部退出,关闭wifi,蓝牙等…这样可以节能
采纳率:70%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。转自 http://kb.cnblogs.com/page/77741/
在对尚邮架构师的访谈中曾经探讨过移动开发是否要重视移动终端软件的耗电问题,答案是显而易见的!那么如何才能降低Android应用程序的耗电量呢?今天再一次回顾了一下09年Google IO大会Jeffrey Sharkey的演讲(Coding for Life — Battery Life, That Is),同时也讲一下应该如何有效地控制耗电量问题。
  首先我们来看看Android手机的电量都主要消耗在了什么地方:
  显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。
  简单的说也就是主要在以下情况下耗电比较多:
  1、大数据量的传输。
  2、不停的在网络间切换。
  3、解析大量的文本数据。
  那么我们怎么样来改善一下我们的程序呢?
  1、在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序。
  检查网络连接的方法如下:
ConnectivityManager mC
TelephonyManager mT
检查网络连接,如果无网络可用,就不需要进行连网操作等
NetworkInfo info
mConnectivity.getActiveNetworkInfo();
mConnectivity.getBackgroundDataSetting()) {
判断网络连接类型,只有在3G或wifi里进行一些数据更新。
info.getType();
netSubtype
info.getSubtype();
ConnectivityManager.TYPE_WIFI) {
info.isConnected();
ConnectivityManager.TYPE_MOBILE
netSubtype
TelephonyManager.NETWORK_TYPE_UMTS
mTelephony.isNetworkRoaming()) {
info.isConnected();
  &2、使用效率高的数据格式和解析方法。
  通过测试发现,目前主流的数据格式,使用树形解析(如DOM)和流的方式解析(SAX)对比情况如下图所示:
  很明显,使用流的方式解析效率要高一些,因为DOM解析是在对整个文档读取完后,再根据节点层次等再组织起来。而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。
  在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是Google提出的,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。有兴趣的可以到官方去看看更多的信息。
  从上面的图中我们可以得出结论就是尽量使用SAX等边读取边解析的方式来解析数据,针对移动设备,最好能使用JSON之类的轻量级数据格式为佳。
  3、目前大部门网站都支持GZIP压缩,所以在进行大数据量下载时,尽量使用GZIP方式下载。
  使用方法如下所示:
java.util.zip.GZIPInputS
HttpGet request
http://example.com/gzipcontent
HttpResponse resp
DefaultHttpClient().execute(request);
HttpEntity entity
response.getEntity();
InputStream compressed
entity.getContent();
InputStream rawData
GZIPInputStream(compressed);
  使用GZIP压缩方式下载数据,能减少网络流量,下图为使用GZIP方式获取包含1800个主题的RSS对比情况。
  4、其它一些优化方法:
  回收java对象,特别是较大的java对像
XmlPullParserFactory and BitmapFactory
Matcher.reset(newString)
StringBuilder.sentLength(
  对定位要求不是太高的话尽量不要使用GPS定位,可能使用wifi和移动网络cell定位即可。GPS定位消耗的电量远远高于移动网络定位。
  尽量不要使用浮点运算。
  获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次请求。
  很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。
AlarmManager am
(AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
Intent intent
Intent(context, MyService.
PendingIntent pendingIntent
PendingIntent.getService(context,
DateUtils.MINUTE_IN_MILLIS
System.currentTimeMillis()
am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);
  最后一招,在运行你的程序前先检查电量,电量太低,那么就提示用户充电之类的,使用方法:
onCreate() {
Register for sticky broadcast and send default
registerReceiver(mReceiver, mFilter);
mHandler.sendEmptyMessageDelayed(MSG_BATT,
IntentFilter mFilter
IntentFilter(Intent.ACTION_BATTERY_CHANGED);
BroadcastReceiver mReceiver
BroadcastReceiver() {
onReceive(Context context, Intent intent) {
Found sticky broadcast, so trigger update
unregisterReceiver(mReceiver);
mHandler.removeMessages(MSG_BATT);
mHandler.obtainMessage(MSG_BATT, intent).sendToTarget();
  想了解更多内容,请直接查看
相关标签/搜索}

我要回帖

更多关于 有效的win32应用程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信