我开发了两种不同的应用程序
App1任务:从存储在服务器中的healthkit读取数据。
App2任务:从服务器检索存储的数据并显示。
我使用openURLScheme从App1启动了App2。所以App1在后台模式下运行,并且它应该持续超过3分钟到一个小时。
我尝试了Scenario:
bgTask = self.applicationUI!.beginBackgroundTaskWithName("MyTask", expirationHandler: { () -> Void in
self.applicationUI!.endBackgroundTask(self.bgTask!)
self.bgTask = UIBackgroundTaskInvalid;
})
self.bgTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in
self.monitorInBackground()
})
我收到错误: allowedBackgroundDuration:180.000000 reason:finishTask
下一个3分钟的后台程序(在IOS 7介绍之后。在IOS 7之前,流程执行时间为10分钟)。
注意:
我希望使用APNS无声通知是可行的。但除了APNS之外,我期待更好的解决方案。
答案 0 :(得分:2)
Apple在background execution in their documentation上有一个很好的部分。
执行此操作的两种方法是静默通知(如您所建议)和后台提取。
" pro"使用静默通知的是,只要您的用户在线,您就可以相当精确地控制它何时发生。 (无论如何,他们可能必须访问服务器。)但是,是的,它增加了很多复杂性。
后台提取效果很好,但是当发生时,你无法控制。这可能是也可能不是问题,具体取决于您的应用程序的功能。
可能有效的其他选项包括背景音频,位置更新和VoIP,但它们可能会让您被拒绝。
运行后台任务不会起作用 - 这是为完成任务而不是让它们长时间运行而设计的。