如何调用一个方法的数据,只有当应用程序在后台,一个小时的时间间隔
我想刷新我的应用程序数据, 当应用程序在后台每隔一小时 ,但只有当应用程序在后台。 早些时候,我正在按一下button。 我正在调用一个API
button,但现在我希望当我的应用程序每隔一小时后进入后台时也是如此。 有没有可能做到这一点。
我已经尝试调用该方法的下面的代码,但它没有被调用在后台。
NSTimer* dataTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(autoRefreshAppData) userInfo:nil repeats:YES];
两个选项: BackgroundFetch
或silent Push Notification
。
在这里find更多细节。
在后台下载内容
对的,这是可能的。
您主要有select使用计划的任务或执行推送通知的代码块。 在我看来,这是最容易的一个计划任务,但我已经体验到,任务并不总是执行。 因此,如果您的应用程序依赖后台提取,则应检查数据是否在application:willEnterForeground
下载application:willEnterForeground
,如果新数据不可用,请下载数据。
以下是关于“ 后台执行 ”主题的Objective-c文档的链接
Objective-C的:
创build支持后台下载的configuration对象的过程如下:
- 使用NSURLSessionConfiguration的backgroundSessionConfigurationWithIdentifier:方法创buildconfiguration对象。
- 将configuration对象的sessionSendsLaunchEvents属性的值设置为YES。
- 如果您的应用程序在前台开始传输,则build议您也将configuration对象的任意属性设置为YES。
- 根据需要configurationconfiguration对象的任何其他属性。
- 使用configuration对象来创build您的NSURLSession对象。
configuration完成后,NSURLSession对象会在适当的时候无缝地将上传和下载任务交给系统。 如果任务在您的应用程序仍在运行时(在前台或后台)完成,则会话对象以通常的方式通知其委托。 如果任务尚未完成,系统终止您的应用程序,系统将自动继续在后台pipe理任务。 如果用户终止您的应用程序,系统将取消所有待处理的任务。
当与后台会话相关的所有任务都完成后,系统重新启动一个已终止的应用程序(假设sessionSendsLaunchEvents属性设置为YES,并且用户不强制退出应用程序)并调用应用程序委托的
application:handleEventsForBackgroundURLSession:completionHandler:
方法。 (系统还可以重新启动应用程序以处理需要应用程序关注的身份validation挑战或其他与任务相关的事件。)在实现该委托方法时,使用提供的标识符创build一个新的NSURLSessionConfiguration和NSURLSession对象,其configuration与之前。 系统将您的新会话对象重新连接到之前的任务,并将其状态报告给会话对象的委托。
因为我使用Swift编码,所以我会提供一些文档。 Swift 3.0
- 创build一个调度程序
要初始化调度程序,请为NSBackgroundActivityScheduler调用init(identifier :),并以反向DNS表示法向其传递一个唯一的标识符string(零和零长度的string不允许),在应用程序启动时保持不变。
let activity = NSBackgroundActivityScheduler(identifier: "com.example.MyApp.updatecheck")
系统使用此唯一标识符来跟踪活动的运行次数,并改进启发式方法以决定将来何时再次运行。
- configuration计划程序属性
有几个属性可以configuration,请检查API参考。 例如:
安排一个活动每小时触发一次
activity.repeats = true activity.interval = 60 * 60
- 使用scheduleWithBlock调度活动:
当你的块被调用时,它会传递一个完成处理程序作为参数。 configuration块来调用这个处理程序,传递一个types为NSBackgroundActivityScheduler.Result的结果来指示活动是完成(完成)还是应该被延迟(延迟)并在以后重新调度。 未能调用完成处理程序会导致该活动不被重新计划。 对于将被推迟和重新计划的工作,在调用完成处理程序之前,块可以select性地调整调度程序属性,例如间隔或容差。
activity.scheduleWithBlock() { (completion: NSBackgroundActivityCompletionHandler) in // Perform the activity self.completion(NSBackgroundActivityResult.Finished) }
注意事项:
应用程序只能获得后台执行大约10分钟(大约3分钟的iOS 7) – 在此之后,定时器将停止触发。 从设备locking时的iOS 7开始,它将几乎立即暂停前台应用程序。 iOS 7应用程序被locking后,定时器不会触发。