Android Q新特性:Delay the ACTION_CHARGING broadcast
1.1 目的
为了提升用户的充电速度的体验
1.2 之前存在的问题
首先,我们知道,在手机充电的过程中或者在电量大于90%,系统会发送ACTION_CHARGING广播,对于第三方应用或者系统应用来说,它们接收到这个广播后会做很多比较好电的工作。我们想象一个场景,用户手机没多少电了,他们想快速充一下电后立马用,比如说他们希望电量增加20%后立马用起来,但是对于android Q之前的系统而言,当你手机充电后,系统发送ACTION_CHARGING广播,系统中所有应用收到广播后立马去做比较耗电的工作。那么,充电速度肯定会受到影响,用户等待的时间会比较长。
1.3 解决方案
把ACTION_CHARGING延迟发送,默认延迟15min钟。详细信息如下:
core/java/com/android/internal/os/BatteryStatsImpl.java::setBatteryStateLocked
Android Q之前:的逻辑是只要当前电量大于上一次电量,那么就会setChargingLocked(true),进而触发:ACTION_CHARGING
Android Q上:这个逻辑被删除,首先判断这个ACTION_CHARGING有没有被延迟过,如果没有那么,就会post一个延迟消息出去,默认延迟15min,
再去触发ACTION_CHARGING,如果,当前电量还比之前的电量小了,就把之前的处于postdelay中的用来触发ACTION_CHARGING,runnalble取消掉
DEFAULT_BATTERY_CHARGED_DELAY_MS,的值可以通过setChargingStateUpdateDelayMillis来修改
在Ruunable还会继续判断,手机是否在放电,如果在放电那么,ACTION_CHARGING也不会被发出去,发送MSG_REPORT_CHARGING消息
发送ACTION_CHARGING广播