首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在特定时间点执行后台获取

如何在特定时间点执行后台获取
EN

Stack Overflow用户
提问于 2014-01-21 17:50:00
回答 4查看 2.8K关注 0票数 3

我有一个应用程序,从通讯录同步其联系人,我只需要检查新的联系人,并同步到我的应用程序数据库中的联系人每天午夜自动。

我已经通过了iOS7新功能"Background Fetch",但这与我的要求不匹配,在这种情况下,后台获取将由操作系统根据用户活动触发。

然而,我的数据在凌晨12点之前就过时了,如果在这个特定的时间没有启动这个活动,我的应用程序将变得无用。

有没有办法实现我所需要的,以便我可以同步我的数据库与地址簿每天午夜使用后台进程。

谢谢

EN

Stack Overflow用户

发布于 2014-01-21 18:16:16

您可以订阅ABAddressBookRegisterExternalChangeCallback,以便在修改通讯簿数据库时接收通知。我认为这比调度同步更好,然而,只有当应用程序在前台时,这才会起作用。但当应用程序被挂起时,它不能做任何直接唤醒自己的事情。它之前不能调度NSTimer,它不能使用performSelector:afterDelay之类的东西等等。应用程序再次激活的唯一方法是如果用户做了一些事情来激活它,例如,收到本地或远程通知,并弹出一个警报。只有当应用程序有后台模式时,才允许长时间在后台模式下执行,这些模式包括:voipaudiolocationnewstand。即使应用程序具有这些类型中的一种,也无法在没有某些限制的情况下执行其代码。

因此,唯一的方法是iOS 7的特性:background task execution if content avaliable,正如James Frost所建议的那样,但是要做到这一点,你需要你的外部服务器,它将向你的应用程序发送推送通知。

你说:"...is not started at this particular time instance my app will be rendered useless.",但是在应用程序再次启动之前,谁来检查这个呢?如果时间值之间的增量大于某个值,为什么不能在每次应用程序运行期间使用地址簿进行所有关键更新?我的意思是,您可以(当应用程序返回到applicationDidFinishLaunching中的前台时)计算NSDate now和您在同步完成后存储在NSUserDefaultsplist中的最后一个同步日期值之间的增量。如果增量大于24小时,则再次调用同步方法。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21254533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档