我正在为iPod Touch开发一个iOS应用程序,我的应用程序总是在其中显示服务器时间。通过向服务器发出Web服务调用,每当应用程序到达前台时,我总是将应用程序时间与服务器时间同步。如果我的服务器和客户端之间的连接丢失几个小时,我将无法同步应用程序时间。我读过iOS不支持在应用程序处于后台时运行计时器,除了下面提到的几个有限的情况:
那么如何跟踪申请时间?每当用户切换到我的应用程序时,他都需要查看服务器时间,因此我需要运行一个计时器来更新上次同步的服务器时间。
答案 0 :(得分:1)
其他答案的组合,使用NSDate* lastSync
和{{ 1}}。例如:
applicationDidBecomeActive
ServerTimeSync将使用上次同步时间维护-(void)applicationDidBecomeActive:(UIApplication*)application {
[ServerTimeSync sharedInstance] resync];
}
属性(您需要将服务器提供的内容转换为NSDate*
)。
答案 1 :(得分:0)
当应用进入后台时,您可以存储NSDate
。恢复后,再次获取当前NSDate
,并将差异添加到存储的服务器时间。
答案 2 :(得分:0)
根本不需要计时器。
我建议您在与服务器同步时间时,让它返回当前的UNIX时间戳。然后你可以这样做:
[[NSDate date] timeIntervalSince1970];
...获取设备当前的UNIX时间戳。然后你可以做的是存储这两个时间戳之间的差异。这是服务器时间和设备时间之间的时钟偏差。
现在,您可以通过获取设备当前的UNIX时间戳并为其添加时钟偏差来计算服务器的大致时间。在显示时调整时区(如果需要),您就完成了。每当您与服务器同步时间时,您只需刷新存储的时钟偏差值。
如果您想获得想象力,您还可以在确定时钟偏差时尝试测量并考虑网络延迟。
这种方法应该比尝试存储服务器的绝对时间戳更好,然后使用计时器(或任何其他机制)跟踪已经过了多长时间。