关于电量性能优化的总结

  • Standby

最低的状态,没有数据连接需要传输,电量消耗最少。

总之,为了减少电量的消耗,在蜂窝移动网络下,最好做到批量执行网络请求,尽量避免频繁的间隔网络请求。

使用 Battery Historian 我们可以得到设备的电量消耗数据,如果数据中的移动蜂窝网络(Mobile Radio)电量消耗呈现下面的情况,间隔很小,又频繁断断续续的出现,说明电量消耗性能很不好:

battery bad

经过优化之后,如果呈现下面的图示,说明电量消耗的性能是良好的:

battery good

另外 WiFi 连接下,网络传输的电量消耗要比移动网络少很多,应该尽量减少移动网络下的数据传输,多在 WiFi 环境下传输数据。

battery wif

那么如何才能够把任务缓存起来,做到批量化执行呢?我们可以使用 JobScheduler 来优化。

跟踪充电状态


我们可以通过下面的代码来获取手机的当前充电状态:

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

Intent batteryStatus = this.registerReceiver(null, filter);

int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);

boolean acCharge = (chargePlug == BatteryManager.BATTERY_PLUGGED_AC);

if (acCharge) {

Log.v(LOG_TAG, “The phone is charging!”);

}

在上面的例子演示了如何立即获取到手机的充电状态,得到充电状态信息之后,我们可以有针对性的对部分代码做优化。

比如:我们可以判断只有当前手机为 AC 充电状态时 才去执行一些非常耗电的操作。

private boolean checkForPower() {

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

Intent batteryStatus = this.registerReceiver(null, filter);

int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);

boolean usbCharge = (chargePlug == BatteryManager.BATTERY_PLUGGED_USB);

boolean acCharge = (chargePlug == BatteryManager.BATTERY_PLUGGED_AC);

boolean wirelessCharge = false;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

wirelessCharge =

(chargePlug == BatteryManager.BATTERY_PLUGGED_WIRELESS);

}

return (usbCharge || acCharge || wirelessCharge);

}

监听充电状态变化

在清单文件中注册一个 BroadcastReceiver,通过在一个 Intent 过滤器内定义 ACTION_POWER_CONNECTED 和 ACTION_POWER_DISCONNECTED 来同时侦听这两种事件。

创建监听充电状态变化的 PowerConnectionReceiver。

public class PowerConnectionReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,

BatteryManager.BATTERY_STATUS_UNKNOWN);

String batteryStatus = “”;

switch (status) {

case BatteryManager.BATTERY_STATUS_CHARGING:

batteryStatus = “正在充电”;

break;

case BatteryManager.BATTERY_STATUS_DISCHARGING:

batteryStatus = “正在放电”;

break;

case BatteryManager.BATTERY_STATUS_NOT_CHARGING:

batteryStatus = “未充电”;

break;

case BatteryManager.BATTERY_STATUS_FULL:

batteryStatus = “充满电”;

break;

case BatteryManager.BATTERY_STATUS_UNKNOWN:

batt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值