jiahongfei / TodayStepCounter

Android计步模块(类似微信运动,支付宝计步,今日步数),记录当天从0点到23:59的步数
1.18k stars 241 forks source link

关机重启sOffsetStep的计算问题。 #14

Open chenpdsu opened 6 years ago

chenpdsu commented 6 years ago

手机关机前记录微信与本demo的步数。 关机重启,不打开微信和本demo。进行测试。 随后对比数据发现微信的步数增加。本demo的数据还停留在关机前。

看了一下处理关机重启sOffsetStep的方法。sOffsetStep = counterStep - tmpCurrStep;

最终的计算又是 sCurrStep = counterStep - sOffsetStep 。这种计算结果就是tmpCurrStep。 int tmpCurrStep = (int) PreferencesHelper.getCurrentStep(mContext); tmpCurrStep就是关机之前保存的值。

这明显不对啊。

BCsl commented 5 years ago

这里没有问题的,sOffsetStep 初始情况下记录的是计步器当前的步数,计算当前步数公式就是 当前步数 = 当前计步器的步数 - 开始记录时候计步器的步数,但是开关机之后,计步器的步数会清 0 的,如果还是使用之前的 sOffsetStep 去计算步数肯定是有问题的,所以需要首次步数回调的时候进行修正,使得修正后的首次计算的步数还是上一次的步数(这次的步数回调仅仅用于修正数据),lastSensorOffsetStep(上次记录的值) ==修正=> lastSensorOffsetStep = currentSensorOffset(重置后) - currentStep(上次计算的步数)。所以说代码没问题的 @chenpdsu 。另外不得不吐槽,这个库的变量有用的没用的一大堆,也没什么注释,命名也是看得一愣一愣得,实在是难看懂

jiahongfei commented 5 years ago

确实代码规范有待于提高,等项目不忙有时间在更新一个版本,去掉无用变量,增加代码注释,另外这个关机从新打开步数不增加其实也有解决办法就是将将sOffsetStep= -currentSensor(传感器步数),这是因为手机开关机有两个分支:1跨天这个进入其他分支清零;2当天这个传感器步数取反就可以了将他当天传感器归零之后走的全部给他算上了