
《Android高性能编程》-电量消耗
分析
检测电池电量和充电状态
BatteryManager会规律的发送Intent,可以捕获该content获知电池状态
Intent.ACTION_BATTERY_CHANGED
如果设备正在充电,我们可以最大限度地发挥所有操作。 BatteryManager.BATTERY_STATUS_CHARGING || BATTERY_STATUS_FULL
识别充电状态的变化
接收上面的广播
注册广播 ACTION_POWER_CONNECTED, ACTION_POWER_DISCONNECTED
获取信息 intent.getIntentExtra(BatteryManager.EXTRA_STATUS)
确定及相应电池电量的变化
level: intent.getIntentExtra(BatteryManager.EXTRA_LEVEL)
scale: intent.getIntentExtra(BatteryManager.EXTRA_SCALE)
用电比例:level/scale
注册广播 ACTION_POWER_LOW, ACTION_POWER_OKAY
Doze和AppStandby(23)
Doze模式:>23默认开启。可以针对某个应用程序关闭
- 不能进行网络操作
- WekeLock会被忽略
- AlarmManager类定制的闹铃计划会被忽略
- 应用程序不能扫描wifi
- 同步适配器以及任务调度会被禁止
避免无用的网络请求
在执行任何请求之前,我们都应该让应用程序检查网络连接是否可用,减少电量的一种手段。要避免在非WIFI环境下,下载大数据块。
wifi速度(wifiManager.getConnectionInfo info.getLinkSpeed)
3G/4G 可以通过网络下载一些数据,然后建立起一个关系,计算近似值
按需对待BroadcastReceiver
可以根据当前手机状态,动态激活/失效BroadcastReceiver。比如如果网路连接丢失,可能只希望等待网络连接成功。
网络
原则:预获取数据,减少连接数量,批量处理和调度,使用GCM, 使用缓存机制,压缩信息 批量处理和调度有3个可用API: GCM, JobScheduler, Sync Adapter,