我们正在开发一个分布式系统数据库同步,它依赖于实时。
由于用户或网络故障可以更改设备的时间,因此很容易损坏整个数据库。所以我们决定从Master服务器获取时间,存储起来,通过计算时钟滴答数来计算经过的时间间隔,计算出实时时间。我们如何才能访问硬件的时钟滴答。我们是否必须为此运行一些服务?我们希望即使在设备处于待机/睡眠/关闭状态时也能计算滴答声。就像显示的实际时钟一样。我们希望它是一种并行时钟,只是只有主服务器才能在其上设置时间。
我们正在开发一个分布式系统数据库同步,它依赖于实时。
由于用户或网络故障可以更改设备的时间,因此很容易损坏整个数据库。所以我们决定从Master服务器获取时间,存储起来,通过计算时钟滴答数来计算经过的时间间隔,计算出实时时间。我们如何才能访问硬件的时钟滴答。我们是否必须为此运行一些服务?我们希望即使在设备处于待机/睡眠/关闭状态时也能计算滴答声。就像显示的实际时钟一样。我们希望它是一种并行时钟,只是只有主服务器才能在其上设置时间。
我们如何才能访问硬件的时钟滴答。
你没有。
我们希望即使在设备处于待机/睡眠/关闭状态时也能计算滴答声。
您的用户没有。您的用户希望他们的设备能够正常运行,而不是让一些软件保持 CPU 通电并占用 RAM,只是看着时钟滴答作响,因为那样会很快耗尽电池电量。
也许在您附近的“偏远地区和村庄”情况有所不同。在宇宙的大多数已知部分中,即使您的应用程序没有运行,时间也会流逝。
因此,您不需要“计算滴答声”来确定时间是否过去。相反,当您“从主服务器获取时间”并“存储它”时,您还存储了 的当前值SystemClock.elapsedRealtime()
,即自手机上次重新启动以来的毫秒数。然后,当您需要确定相对于“主服务器”的时间时,计算存储elapsedRealtime()
值与当前elapsedRealtime()
值之间的差异,并将该毫秒数与“主服务器的时间”相加得到当前时间正如“主服务器”所见。