首先我们来看看android手机的电量都主要消耗在了什么地方:
显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。简单的说也就是主要在以下情况下耗电比较多:
1、 大数据量的传输。2、 不停的在网络间切换。3、 解析大量的文本数据。
那么我们怎么样来改善一下我们的程序呢?
1、 在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序。
检查网络连接的方法如下:
ConnectivityManager mConnectivity;
TelephonyManager mTelephony;
……
// 检查网络连接,如果无网络可用,就不需要进行连网操作等
NetworkInfo info = mConnectivity.getActiveNetworkInfo();
if (info == null ||!mConnectivity.getBackgroundDataSetting()) {
return false;
}
//判断网络连接类型,只有在3G或wifi里进行一些数据更新。
int netType = info.getType();
int netSubtype = 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 {
return false;
}
2、 使用效率高的数据格式和解析方法。通过测试发现,目前主流的数据格式,使用树形解析(如DOM)和流的方式解析(SAX)对比情况如下图所示:
很明显,使用流的方式解析效率要高一些,因为DOM解析是在对整个文档读取完后,再根据节点层次等再组织起来。而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。
在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是google提出的,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。有兴趣的可以到官方去看看更多的信息http://code.google.com/p/protobuf/。
从上面的图中我们可以得出结论就是尽量使用SAX等边读取边解析的方式来解析数据,针对移动设备,最好能使用JSON之类的轻量级数据格式为佳。
3、 目前大部门网站都支持GZIP压缩,所以在进行大数据量下载时,尽量使用GZIP方式下载。使用方法如下所示:
import java.util.zip.GZIPInputStream;
HttpGet request = new HttpGet("http://example.com/gzipcontent");
HttpResponse resp = new DefaultHttpClient().execute(request);
HttpEntity entity = response.getEntity();
InputStream compressed = entity.getContent();
InputStream rawData = new GZIPInputStream(compressed);
使用GZIP压缩方式下载数据,能减少网络流量,下图为使用GZIP方式获取包含1800个主题的RSS对比情况。
4、 其它一些优化方法:
回收java对象,特别是较大的java对像
XmlPullParserFactory and BitmapFactory
Matcher.reset(newString) for regex
StringBuilder.sentLength(0)
对定位要求不是太高的话尽量不要使用GPS定位,可能使用wifi和移动网络cell定位即可。GPS定位消耗的电量远远高于移动网络定位。
尽量不要使用浮点运算。
获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次请求。
很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
long interval = DateUtils.MINUTE_IN_MILLIS * 30;
long firstWake = System.currentTimeMillis() + interval;
am.setRepeating(AlarmManager.RTC,firstWake, interval, pendingIntent);
最后一招,在运行你的程序前先检查电量,电量太低,那么就提示用户充电之类的,哈哈!使用方法:
查看源码打印?
public void onCreate() {
// Register for sticky broadcast and send default
registerReceiver(mReceiver, mFilter);
mHandler.sendEmptyMessageDelayed(MSG_BATT, 1000);
}
IntentFilter mFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// Found sticky broadcast, so trigger update
unregisterReceiver(mReceiver);
mHandler.removeMessages(MSG_BATT);
mHandler.obtainMessage(MSG_BATT, intent).sendToTarget();
}
};
想了解更多内容,请直接查看google IO 2009相关文档:
http://code.google.com/events/io/2009/sessions/CodingLifeBatteryLife.html转自:http://www.ideasandroid.com/archives/380
分享到:
相关推荐
"Android应用耗电排行显示"项目旨在通过编程方式获取并展示Android设备上各个应用程序的耗电量信息。以下是对这个主题的详细解释和相关知识点: 1. **Android电量监控框架**: Android系统提供了一个名为`...
本文将详细介绍如何通过ADB工具以及编写批处理(bat)脚本来实现Android应用耗电量的测试,帮助开发者更好地理解并优化其应用程序。 #### 一、基本概念介绍 1. **ADB (Android Debug Bridge):** - ADB 是一个...
1.由头客户这边最高层说我们的产品太耗电,要我们解决耗电问题。2.思路 1.由头 客户这边最高层说我们的产品太耗电,要我们...经验 Android的大耗电量一般由以下四个构成 a.频繁的GC,不一定是fullGC。频繁的full
在Android平台上,有效地控制应用程序的耗电量是提升用户体验的关键因素之一。用户对于手机的耗电量有着明确的期望:在使用应用如观看视频、玩游戏时,他们可以接受较高的耗电,但在待机状态下,他们期待手机能保持...
"最全的Android耗电量统计源码" 提供了这样的工具和方法,它可以帮助我们深入理解各个程序运行时的能源消耗情况。下面将详细介绍这个主题中的相关知识点。 一、Android系统电量监控框架 Android系统内置了一套电量...
"Android 应用程序开发第二版课后习题答案最新版" 本资源提供了 Android 应用程序开发第二版课后习题答案的最新版,涵盖 Android 应用程序开发的基础知识,包括手机操作系统的特点、Android 平台的特征、Android ...
本文将深入探讨应用程序耗电管理的方法以及在移动终端上的实现策略。 首先,了解移动应用耗电的原因至关重要。通常,应用程序的耗电量主要来源于以下几个方面:CPU的持续工作、屏幕亮度、网络通信(包括数据传输和...
为了提供最佳的用户体验,开发者需要了解并实施一些策略来有效控制Android应用的耗电量。以下是一些核心的知识点,帮助开发者优化应用的能耗: 1. **电源管理基础**:了解Android设备的电源消耗来源是至关重要的。...
"Android平台环境下应用程序架构的设计与实现" 在 Android 平台环境下,应用程序架构的设计与实现是一个至关重要的部分,对于应用程序的性能、可维护性、可扩展性等方面具有关键作用。本文将探讨 Android 平台环境...
《实战Android应用开发》这本书是为想要深入学习Android应用程序开发的开发者量身打造的实践指南。书中涵盖了Android开发的基础知识到高级技术,旨在帮助读者掌握实际项目中的Android应用开发技能。 首先,Android...
结合这两本书的内容,开发者可以全面掌握Android应用程序的开发流程,从设计用户界面到实现功能,再到优化性能,以及高效地管理数据。无论是初学者还是经验丰富的开发者,这些知识都能为你的Android开发技能树增添...
通过MyAppWeixin这个文件名我们可以推测,这可能包含了微信的主程序包或者定制版的应用程序。 1. **界面UI与布局设计**:微信的界面设计遵循Material Design规范,使用XML布局文件定义各个视图组件,包括TextView、...
《Android应用开发揭秘》这本书是Android开发者们的重要参考资料,它深入浅出地揭示了Android应用程序的设计与开发技术。本文将围绕这个主题,详细介绍Android应用开发的相关知识点,包括但不限于环境搭建、UI设计、...
《大话企业级Android应用开发实战》是一本深入探讨企业级Android应用开发的书籍,其光盘源码包含了丰富的实践示例和项目代码,旨在帮助读者掌握在实际工作环境中构建高效、稳定、功能完备的Android应用程序所需的...
- **优化GPS和位置服务**:减少位置更新的频率,使用位置服务时注意权衡精度和耗电量之间的平衡。 5. **网络请求优化** - **使用连接池**:复用HTTP连接,减少建立新连接的时间开销。 - **压缩数据传输**:启用...
"安卓app电量监控工具"就是这样一个专门设计用于监测应用程序耗电量的工具。通过使用此类工具,开发者和测试人员可以详细地分析应用的能源效率,找出可能存在的电量消耗问题,并优化代码以减少不必要的能源消耗。 ...
通过对App和硬件耗电量的计算,我们可以更深入地理解应用程序和设备组件对电池的影响。这对于开发者来说是非常有价值的,因为这可以帮助他们优化应用性能,减少不必要的电量消耗,从而提升用户的体验。同时,对于...
在Android平台上,电池监控应用程序是开发者为用户提供电池状态信息的重要工具。这个名为"Android应用源码battery(电池)监控程序.zip"的压缩包文件包含了实现此类功能的源代码,是学习和理解Android电池监控功能的一...
书中会讲解Android系统架构、版本历史以及Android应用程序的基本组成,包括Activity、Service、Broadcast Receiver和Content Provider等四大组件。 2. **开发环境搭建**:Android Studio是官方推荐的集成开发环境...