iPhone后台模式下的内部时钟

iPhone后台模式下的内部时钟,第1张

概述在我的应用程序中,我想在后台模式下运行内部时钟[当应用程序未在前台运行时]. 整个功能将是这样的: 目标是让服务器在应用程序中使用时间,因为使用设备时间有时可能会导致问题.问题可能出现在有人改变了用户的iPhone时间等情况.所以我遵循以下方法. – 即使应用程序未运行,也可以在我的应用程序后台运行内部时钟. – 每15分钟与服务器通信,以获得实时和运行计时器. – 如果网络之间断开连接,定时器将 在我的应用程序中,我想在后台模式下运行内部时钟[当应用程序未在前台运行时].

整个功能将是这样的:

目标是让服务器在应用程序中使用时间,因为使用设备时间有时可能会导致问题.问题可能出现在有人改变了用户的iPhone时间等情况.所以我遵循以下方法.

– 即使应用程序未运行,也可以在我的应用程序后台运行内部时钟.
– 每15分钟与服务器通信,以获得实时和运行计时器.
– 如果网络之间断开连接,定时器将继续并占用定时器时间.

我的申请在很大程度上取决于这个时间因素,因为这是一个机票预订系统.请帮我实现这个或请确认这是否可行?

我正在开发一个涉及票务预订系统的iPhone应用程序.我将我的应用程序注册为基于位置的,因为它正在使用用户在后台拍摄的位置.

我的问题是我需要在后台模式下在我的应用程序中运行内部时钟.我需要在核心位置委托方法中编写内部时钟的代码,这样内部时钟也将与位置服务一起运行.我的应用会被拒绝吗?这样做有什么不对吗?

我需要在我的应用程序中获得正确的时间,以便我运行此内部时钟.我可以使用NSDate,但这将返回设备时间.任何人都可以更改设备时间.因此,一旦有人唠叨,错误的时间将影响应用程序的顺利运行.有些人建议在没有运行内部时钟的情况下获得正确的时间吗?

解决方法 更新:抱歉说我的原始答案不正确.当设备进入休眠状态(可能在锁定后的某个时间发生),内部cpu时钟停止滴答,并且mach_absolute_time也不会更新.从理论上讲,如果你在设备进入睡眠状态之前调用它,并且在它唤醒之后,它将返回完全相同的值.

我知道检查日期更改的最佳方法是kern.boottime,它保存启动时间,并在系统时间更改时进行修改.除其他外,如果用户更改时间,或者 *** 作系统根据来自单元塔的信息更改时间本身,将更新kern.boottime.

因此,在您的情况下,您可以采用您计算的原始时间并根据kern.boottime中的修改进行修改.如果您看到kern.boottime发生了显着变化,则可能意味着该设备已关闭,在这种情况下,您需要联系服务器询问它直到航班的时间.

相关代码:

time_t getBoottimeSecs(voID){    struct timeval boottime;        size_t size = sizeof(boottime);    int ret = sysctlbyname("kern.boottime",&boottime,&size,NulL,0);    assert(ret == 0);    return boottime.tv_sec;}

原始(不正确)答案:您可以使用不受用户日期更改影响的mach_absolute_time.

预订故障单时,从服务器获取正确的日期并记录mach_absolute_time.现在,您可以随时调用mach_absolute_time,计算与最初记录的差异,并显示正确的日期.

只有在设备未关闭的情况下才会起作用,应用程序重新连接到服务器以获取正确的日期是有意义的.

即使应用程序未运行,您也可以使用本地或推送通知在目标日期越来越近时提醒用户.

总结

以上是内存溢出为你收集整理的iPhone后台模式下的内部时钟全部内容,希望文章能够帮你解决iPhone后台模式下的内部时钟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1036459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存