首页 > 代码库 > Android App优化之延长电池续航时间

Android App优化之延长电池续航时间

禁用广播接收器

确保广播接收器在真正需要时才执行指令,在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文件中设置权限