电量优化方法

Android 官方

(1)监控电池电量和充电状态(Monitoring the Battery Level and Charging State)

通过系统广播,获取充电状态和电池电量的变化来调整数据更新等操作;如在充电时,更新数据及应用,在低电量时,减少更新频率或停止gen

(2)确定和监控基座对接状态和类型(Determining and Monitoring the Docking State and Type)

和监控充电状态类似,通过系统广播,获取充电基座类型(车载基座、桌面基座),改变应用更新频率和方式

(3)确定和监控网络连接状态(Determining and Monitoring the Connectivity Status)

也和监控充电状态类似,根据当前连接网络的类型采取不同的策略。一般情况WiFi耗电要比移动数据流量低很多。监听CONNECTIVITY_CHANGE,可以在网络状态变化时调整策略

(4)根据需要操作广播接收器(Manipulating Broadcast Receivers On Demand)

主要说明可通过PackageManager的setComponentEnabledSetting方法来改变组件的启用与禁用。需要注意的是,此方法会导致应用的通知栏变化,不过系统会发送Intent.ACTION_PACKAGE_CHANGED广播,而且要留心这种变化的持续性,避免误认为广播接收器偶尔不正常。

耗电大户主要是设备唤醒、CPU和网络、传感器。
(1)设备唤醒单提出来说是因为通过Alarm可唤醒设备,而项目中不限制的滥用,导致系统被频繁唤醒;再加上不恰当的使用wake lock,没有释放wake lock,使得系统长时间无法进入休眠,势必导致高耗电

( 2)CPU和网络耗电方面,主要是减少I/O操作(包括数据库操作),大量的计算;减少网络网络请求次数和数据量

(3)传感器:设备屏幕亮度、颜色背景等需要考虑,但除了阅读类等应用,一般是不太考虑屏幕消耗的。更多的是对GPS的使用注意,减少无用的GPS请求和及时关闭GPS搜索。

通过battery 广播获取电量的准确性问题

ACTION_BATTERY_CHANGED

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_BATTERY_CHANGED);

registerReceiver(filter,receiver);

然后就可以获取电池电量、充电状态、电池状态等信息

缺点:

获取到的是手机整体的耗电量,而不是特定App的耗电量

实时性差,精度较低,只能接受被动通知电量余量以及跳变

app 使用wifi radio 屏幕的统计问题

统计时长不准确。

APP 无法使用BatteryStatusService

其他思路

内部解析dumpsys battery 并上传

results matching ""

    No results matching ""