记一个Android剩余充电时间的bug

最近遇到一个bug,手机充电到90%提示还剩18分钟充满,充到91%时,提示还剩20分钟充满,这一点也不符合逻辑,怎么越充越久。

先看下剩余充电时间的计算

frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java

    @Override
    public long computeChargeTimeRemaining(long curTime) {
        if (mOnBattery) {
            // Not yet working.
            return -1;
        }
        /* Broken
        int curLevel = mCurrentBatteryLevel;
        int plugLevel = mDischargePlugLevel;
        if (plugLevel < 0 || curLevel < (plugLevel+1)) {
            return -1;
        }
        long duration = computeBatteryRealtime(curTime, STATS_SINCE_UNPLUGGED);
        if (duration < 1000*1000) {
            return -1;
        }
        long usPerLevel = duration/(curLevel-plugLevel);
        return usPerLevel * (100-curLevel);
        */
        if (mChargeStepTracker.mNumStepDurations < 1) {
            return -1;
        }
        long msPerLevel = mChargeStepTracker.computeTimePerLevel();
        if (msPerLevel <= 0) {
            return -1;
        }
        return (msPerLevel * (100-mCurrentBatteryLevel)) * 1000;
    }

原理比较简单,先算上一次充1%电量的时间t,然后算出剩余充电时间t*(100-x),x为当前电量。

这种方法没有直接从内核层获取数据,完全就是根据之前的充电数据,估算出来的剩余充电时间。

电池接近满电的时间(也就是从恒流充电阶段进入恒压充电阶段 不同的电池也有差异,有的是80%,有的是90%),由于物理特性,流入电池的电流会越来越小,也就是越往上充,越难充(变现为充电慢)。

那可能就是充电越来越慢,导致算出来的充电时间越来越久,就下来需要抓kernel log,来证明自己的猜想。

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值