这两天看到有朋友提到在不同设备上,《世界迷雾》显示的行走面积存在误差问题。这个问题或者说是bug我也有发现,写出来和大家讨论一下。
首先介绍一下,我有三部设备上分别都装了《世界迷雾》这个APP,分别是有GPS功能的iPhone A和iPhone B,以及没有GPS功能的iPad C。
我具体的使用是每次出门前分别打开iPhone A和iPhone B上面APP的记录按钮,然后分别记录。(之所以开两部设备记录是因为有些信号不好的地方,有时会出现记录的断点。两部同时记录可以尽量确保减少断点情况的出现,两部都没信号,说明那里真的是没信号)回到家后,先将iPhone A进行“同步与备份”到Dropbox账户,同步完成后,再将iPhone B进行“同步与备份”,B同步完成后,重新再将A同步一遍。
这里就涉及到APP的同步机制:每次同步时,APP将手机上的数据与Dropbox上的数据进行对比,将差异部分增加到缺少的那一方(注意,只会增加,不会减少,也就是说这个过程是不可逆的。)例如,发现手机上数据有一段是Dropbox账户里没有的,于是自动把这段数据加进Dropbox。同理,如果发现Dropbox上有一段数据是手机上没有的,也会自动把这段数据加进手机。
所以每次我同步的时候,第一次同步设备A,于是服务器和设备A上的数据都变成了“原服务器数据+设备A数据”,这个时候再同步设备B,于是服务器和设备B上的数据都变成了“原服务器数据+设备A数据+设备B数据”,这个时候的设备A上还是“原服务器数据+设备A数据”,这个时候就需要将设备A再重新同步一次,使之加上设备B数据。这样的话,服务器、设备A、设备B三者的数据就完全同步了。
但是这仅仅是个理论情况,根据我实际测试,发现这三者都会存在一定的误差,不会相等。以我现在的情况为例,设备A上是85.997252平方公里,设备B上是86.115544平方公里,而设备C(实际上就是Dropbox上)是85.910374平方公里。三者皆不相同,最大相差0.2平方公里。经我观察发现,两部有GPS功能的设备A和设备B,它们各自每天所新增加的面积,这部分并不是能够全部被同步到服务器上。例如今天设备A新增了1.85平方公里,但是只有1.83平方公里的数据会被同步到服务器上,还有0.02平方公里的数据只会存在于手机里,不能被同步。设备B也是一样的情况。所以随着行走面积的不断增加,这部分的误差也会不断地增大。所以服务器上的数据永远会小于或者等于设备A或设备B上的数据。
对于这个bug,我用的是一个笨办法,就是定期把设备A和设备B上的APP卸载掉,然后重新安装,从Dropbox上恢复数据,相当于把定期把设备A和B上的数据改成和服务器上的数据一致。这样大家之间的误差又恢复到0,然后慢慢开始增长。。。
这个bug不知道是开发者在计算同步时有啥错误,还是故意而为之。大家有什么好的解决方法,也欢迎一起来讨论。
首先介绍一下,我有三部设备上分别都装了《世界迷雾》这个APP,分别是有GPS功能的iPhone A和iPhone B,以及没有GPS功能的iPad C。
我具体的使用是每次出门前分别打开iPhone A和iPhone B上面APP的记录按钮,然后分别记录。(之所以开两部设备记录是因为有些信号不好的地方,有时会出现记录的断点。两部同时记录可以尽量确保减少断点情况的出现,两部都没信号,说明那里真的是没信号)回到家后,先将iPhone A进行“同步与备份”到Dropbox账户,同步完成后,再将iPhone B进行“同步与备份”,B同步完成后,重新再将A同步一遍。
这里就涉及到APP的同步机制:每次同步时,APP将手机上的数据与Dropbox上的数据进行对比,将差异部分增加到缺少的那一方(注意,只会增加,不会减少,也就是说这个过程是不可逆的。)例如,发现手机上数据有一段是Dropbox账户里没有的,于是自动把这段数据加进Dropbox。同理,如果发现Dropbox上有一段数据是手机上没有的,也会自动把这段数据加进手机。
所以每次我同步的时候,第一次同步设备A,于是服务器和设备A上的数据都变成了“原服务器数据+设备A数据”,这个时候再同步设备B,于是服务器和设备B上的数据都变成了“原服务器数据+设备A数据+设备B数据”,这个时候的设备A上还是“原服务器数据+设备A数据”,这个时候就需要将设备A再重新同步一次,使之加上设备B数据。这样的话,服务器、设备A、设备B三者的数据就完全同步了。
但是这仅仅是个理论情况,根据我实际测试,发现这三者都会存在一定的误差,不会相等。以我现在的情况为例,设备A上是85.997252平方公里,设备B上是86.115544平方公里,而设备C(实际上就是Dropbox上)是85.910374平方公里。三者皆不相同,最大相差0.2平方公里。经我观察发现,两部有GPS功能的设备A和设备B,它们各自每天所新增加的面积,这部分并不是能够全部被同步到服务器上。例如今天设备A新增了1.85平方公里,但是只有1.83平方公里的数据会被同步到服务器上,还有0.02平方公里的数据只会存在于手机里,不能被同步。设备B也是一样的情况。所以随着行走面积的不断增加,这部分的误差也会不断地增大。所以服务器上的数据永远会小于或者等于设备A或设备B上的数据。
对于这个bug,我用的是一个笨办法,就是定期把设备A和设备B上的APP卸载掉,然后重新安装,从Dropbox上恢复数据,相当于把定期把设备A和B上的数据改成和服务器上的数据一致。这样大家之间的误差又恢复到0,然后慢慢开始增长。。。
这个bug不知道是开发者在计算同步时有啥错误,还是故意而为之。大家有什么好的解决方法,也欢迎一起来讨论。