Android服务器时间校准
2014-03-03 13:31
561 查看
http://www.fanjun.me/?p=551
务器的校准可能就是一个比较恶心的问题。
之前想到的比较简单(单位为毫秒),大概步骤如下:
1. 服务器来一个时间,约等于服务器当前时间,设置为s1
2. 拿服务器返回时的本机时间毫秒,设置为c1
3. 在本地时间c2的时候,需要获取服务器的校准时间,s1+(c2-c1)
但是Android还比较友好,就是如果用户修改了时间和修改了时区都会发广播,我们可以
设置一个receiver来监听几个广播,然后重新设置服务器时间。
但是因为这个广播就算有了,我们也不知道用户修改了多少时间,除非重新去服务器拉取服务器
时间,但是在服务器拉取失败或者在服务器拉取时间的这个请求内需要使用服务器时间的情况处
理就比较麻烦了。
其实我们弄这么多,这么复杂其实只是需要知道手机本地当前时间与设置服务器时间的时候的绝
对的时间差。
保持一个时钟,那就是SystemClock.elapsedRealtime() 与 SystemClock.elapsedRealtimeNanos()
我们看看文档是如何写的:
所以按照这种方式,我们在取c1与c2的时候使用这个时间就不会有问题了。
Android服务器时间与客户端时间的校准
由于Android的时间可以由用户调整,然后有时候时间的同步的需求,所以如何进行时间与服务器的校准可能就是一个比较恶心的问题。
之前想到的比较简单(单位为毫秒),大概步骤如下:
1. 服务器来一个时间,约等于服务器当前时间,设置为s1
2. 拿服务器返回时的本机时间毫秒,设置为c1
3. 在本地时间c2的时候,需要获取服务器的校准时间,s1+(c2-c1)
问题
如果本地的时间在中途的时候被用户修改了,可能会导致c2比c1还小,这种情况确实比较坑爹。但是Android还比较友好,就是如果用户修改了时间和修改了时区都会发广播,我们可以
设置一个receiver来监听几个广播,然后重新设置服务器时间。
[code]Intent.ACTION_TIME_CHANGED Intent.ACTION_DATE_CHANGED
但是因为这个广播就算有了,我们也不知道用户修改了多少时间,除非重新去服务器拉取服务器
时间,但是在服务器拉取失败或者在服务器拉取时间的这个请求内需要使用服务器时间的情况处
理就比较麻烦了。
其实我们弄这么多,这么复杂其实只是需要知道手机本地当前时间与设置服务器时间的时候的绝
对的时间差。
解决
具体的解决方案是系统还真有这么一个绝对时间,这个是用户改动不了的,是当用户开机之后会保持一个时钟,那就是SystemClock.elapsedRealtime() 与 SystemClock.elapsedRealtimeNanos()
我们看看文档是如何写的:
[code]>elapsedRealtime() and elapsedRealtimeNanos() return the time since the system was booted, > and include deep sleep. This clock is guaranteed to be monotonic, and continues to tick >even when the CPU is in power saving modes, so is the recommend basis for general purpose > interval timing.
所以按照这种方式,我们在取c1与c2的时候使用这个时间就不会有问题了。
相关文章推荐
- Android时间与服务器同步方法
- Android 从服务器获取时间戳转换为年月日
- android配置时间服务器+亚洲主要的授时服务器
- 时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位
- Android与服务器通讯:如何保证两端时间一致性
- Android(root)设备HTTPS请求时间校准
- Android 从服务器获取时间戳和当前时间算出时间差
- android 中服务器传给客户端一个Timestamp时间戳(Timestamp-->String)
- android配置时间服务器+亚洲主要的授时服务器
- 2015年第一节 Android课,主讲Android图片上传到服务器。时间2015-1-4
- Android日常知识收集与总结之从服务器获取时间戳转换为年月日
- android开发:如果处理,同样的安卓应用程序在不同机器上,运行正常,但是与后台服务器交互响应时间不一样的问题?
- 适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位
- php服务器上的时间转换成android客户端时间和unicode编码转换
- 校准服务器时间命令
- Android 客户端与服务器端时间校准
- Android LocalService的一个示例 - 通过Binder从服务器获取时间
- 羊皮书APP(Android版)开发系列(十一)客户端与服务器端时间校准
- 详解Android提交数据到服务器的两种方式四种方法
- CentOS服务器时间同步的2种方法