码和米的换算单位(码和米的换算计算器)

关于扫健康码iOS和安卓显示时间不一样的问题,引发以下联想:

我们从来没有注意到手机没有显示秒。打开时间设置也只有(小时:分钟),没有秒的,闹钟亦是如此。

前段时间郑州健康码升级,可以在界面中显示当前时间,而且时间动态跳动。偶然我发现我爱人和我的显示时间差了一秒,退出再扫码,依然如此。Why?我疑惑不解。

静下心来,从编程的角度想一想,健康码页面是怎么做出来的:

1 小程序页面启动

2 获取系统当前时间(或服务器时间)

3 开启定时器

4 显示界面,定时器到时间自动刷新页面。

基本流程应该就是这样吧。有不同意见的请保留。

逐步分析一下,第一步肯定是没有什么问题的,直接跳过不谈;第二步的话如果是我做的话我肯定获取的是手机系统当前时间,因为这个场景不是特别重要的秒杀场景,还有就是获取时间是需要用流量的,服务器也会增加开销。这个很容易验证,手动调完手机时间,扫码,显示的真的是我调整后的时间;来到了第三步,定时器开启也不难。但是设置定时器的触发时间可不是头脑发热随便一个数就行了。先说一下屏幕刷新率,我打开了手机开发者模式,在健康码页面,刚开始帧频是50,后来就稳定到了60,换算成毫秒的话,大概是16.67毫秒刷新一次。那我们的定时器需要设置这个值吗?肯定不是了,还是上面提到的场景,定时器设置过快,会增加功耗,并且这个场景也不需要这么快的设置。我平时写定时器,也就随便写个100或者500,从来没有写过16.67这个值。在这里还需要特别的提一下,windows的开发手册msdn上写过,windows系统能响应的最低触发时间是40ms,你设置过低的话,还是会按这个值去触发。安卓系统和苹果系统的没找到相关文档,有知道的小伙伴可以吱一声。开发健康码的人员也不会为不一样的系统设置不一样的触发时间,所以这个也没有什么争议;第四步也很简单,就是显示和刷新。即使苹果手机反应快,但是定时器触发时间都是一致的话,显示最慢的话也都会在16.67毫秒内完成,不可能每次都是规律的一秒。

那这就奇怪了,所有的分析完也没有找到为什么会差一秒。那就只能去找手机获取系统时间的问题了。手机最终得到的系统时间不一样!!!我都被这个结论惊到了。这就要说一说手机的系统时间是怎么来的。手机设置里有一个自动设置时间,是这个设置时,当手机需要获取网络时间时,就会做如下操作:

1 记录下当前时间

2 向服务器发送请求

3 收到请求,再记录下时间

4 两个时间差除以2,再加上服务器获取的时间

这些操作之后,你的手机系统时间就更新成功了。

手机间能产生时间差异的也就在服务器上了。专业的说法叫NTP授时,也可以叫它网络授时中心。网上随便一搜,就能看到,苹果用的是自己的授时中心,中国的授时中心就有好几个,国际上的就更多了。网络授时中心之间的时间也不会每时每刻同步,两个系统用的授时中心不一致,所以倒推回去,就是iOS和小米手机用的网络授时中心时间也存在偏差。当然都用一个网络授时中心的话,即使是精细的计时也是没有问题的。所以至此,健康码引起的时间偏差终于是找到了,即使是不重要的一秒!

创业项目群,学习操作 18个小项目,添加 微信:80709525  备注:小项目

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.11in.com/1571.html