电量优化

电量的检测

注册系统广播监测

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(filter,receiver);

缺点:

  • 获取的是手机整体的电量,不是某个app的耗电量

Battery Historian

Battery Historian可以方便的看到各耗电模块随着时间的耗电情况:包含操作类型、执行时间、对应App等;还可以进行筛选特定的App,给出一个总结性的说明,包括:Network Information、 Syncs、WakeLock、Services、Process info、Scheduled Job、Sensor Use等,查看每一个模块的总结,可以看出来每一项的耗时以及执行次数。

电量优化的一些措施

代码上尽量少执行无谓的操作

网络传输上的优化

  1. 数据采取压缩的方式传输,缩减传输的时间,降低电量消耗
  2. 在更快的网络下进行通信(虽然3G芯片比Wifi芯片耗电低,但Wifi的速率可以让数据在较短时间内完成传输)
  3. 网络操作尽量集中处理

GPS

  1. 选择合适的Location Provider
    • GPS_PROVIDER
    • NETWORK_PROVIDER
    • PASSIVE_PROVIDER
  2. 及时注销定位监听
    • 在获取到定位之后或者程序处于后台时,注销定位监听,此时监听GPS传感器相当于执行no-op,用户不会有感知但是却耗电
  3. 多模块使用定位尽量复用

谨慎使用WakeLock

Wake Lock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠。

  • App在前台不要申请WakeLock,此时无需申请,申请的话会计算到应用电量消耗;
  • App在后台由于业务需要必须要申请WakeLock时使用带有超时参数的方法,防止由于忘记或者异常情况下没有释放;
  • App申请使用WakeLock,任务结束之后及时释放,让系统再次进入休眠状态。
PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK| PowerManager.ON_AFTER_RELEASE,TAG);
wl.acquire(TIMEOUT);// 使用带有超时参数的acquire方法
// ... do work...
wl.release();

传感器

  • 使用传感器,选择合适的采样率,越高的采样率类型则越费电
    • SENSOR_DELAY_NOMAL (200000微秒)
    • SENSOR_DELAY_UI (60000微秒)
    • SENSOR_DELAY_GAME (20000微秒)
    • SENSOR_DELAY_FASTEST (0微秒)
  • 后台及时注销传感器监听

JobScheduler

results matching ""

    No results matching ""