禁用广播接收器
确保广播接收器在真正须要时才运行指令,在onResume中当中广播接收器,在onPause中禁用。
在manifest文件里声明广播接收器时,事先默认配置成禁用的
<receiver android:name=".BatterReceiver" android:enabled="false">
网络
1. 后台数据。后台传输数据时。推断ConnectivityManager的getBackgroundDataSetting()的返回值,假设为true。则进行后台传输数据,假设为false,则不进行后台传输数据
2. 数据传输,手机设备中最耗电的部件依次是:Wi-Fi-》3G-》CPU-》屏幕(都在最高负载时的数据),所以在数据传输时一定不要长时间的占用网络资源,而是应该突发性地传输一段时间内所需的全部资源,关于这个有一篇论文:http://www.research.att.com/articles/featured_stories/2011_03/201102_Energy_efficient?fbid=1N507ukp1ch,最后结论就是:The single most important measure: transmit as much data as possible in a single burst and then end the connection.
1.使用GZIP压缩文本数据,使用GZIPInputStream类訪问数据
2.假设可能的话。使用JPEG而不是PNG的图片文件
3.使用匹配设备分辨率的资源(比方。不必为96x54大小的显示空间下载1920x1080的图片)
位置
1. 在不须要监听位置时注销位置监听器
2. 减小更新位置的频率
3. 使用合适的位置服务。android提供了三种位置服务,GPS、网络定位、被动定位(你的应用会等待其它应用。服务或系统组件发出定位请求,而后和其它监听器一起接受更新)
4. 使用Criteria类来筛选合适的定位服务
5. 使用最后已知位置,能够提高用户体验
传感器
减少传感器数据的更新频率来达到省电的目的
图形
在Android应用性能优化这本书中的第八章有专门的介绍
提醒AlarmManager
ELAPSED_TIME
ELAPSED_TIME_WAKEUP
RTC
RTC_WAKEUP
使用ELAPSED_TIME和RTC表示。计时完时假设设备没有被唤醒则等待设备被唤醒时才运行对应的动作
所以要尽量使用这两个參数
另外,使用AlarmManager的setInexactRepeating也能够达到省电的目的,主要差别是在系统怎样安排提醒到时,Android能够调整实际的触发事件。同一时候触发多个提醒(可能来自多个应用),这样的提醒更节能,系统也避免了出现不必要的唤醒。
WakeLock
获得wakelock之后一定要记得释放
为了防止出现故障,建议使用带超时的WakeLock.acquire()版本号,他会在超过时限后释放WakeLock。
假设用到的屏幕是和Activity中的View关联的,也能够在布局文件里使用XML属性android:keepScreenOn。
这样的方法的优点是,不必冒着忘记释放WakeLock的风险,交由系统处理。也不须要在manifest文件里设置权限