《Android高性能编程》-电量消耗

《Android高性能编程》-电量消耗

2018, May 09    

分析

检测电池电量和充电状态
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默认开启。可以针对某个应用程序关闭

  1. 不能进行网络操作
  2. WekeLock会被忽略
  3. AlarmManager类定制的闹铃计划会被忽略
  4. 应用程序不能扫描wifi
  5. 同步适配器以及任务调度会被禁止

避免无用的网络请求

在执行任何请求之前,我们都应该让应用程序检查网络连接是否可用,减少电量的一种手段。要避免在非WIFI环境下,下载大数据块。
wifi速度(wifiManager.getConnectionInfo info.getLinkSpeed)
3G/4G 可以通过网络下载一些数据,然后建立起一个关系,计算近似值

按需对待BroadcastReceiver

可以根据当前手机状态,动态激活/失效BroadcastReceiver。比如如果网路连接丢失,可能只希望等待网络连接成功。

网络

原则:预获取数据,减少连接数量,批量处理和调度,使用GCM, 使用缓存机制,压缩信息 批量处理和调度有3个可用API: GCM, JobScheduler, Sync Adapter,