我正在将coreLocation与在后台注册位置更新的应用程序一起使用。在应用程序处于后台时,我是否可以对Web服务进行网络调用以下载和存储数据?我在确定在后台可以做多少时遇到问题。
例如,当用户对他/她的位置进行重大更改时,我是否可以拨打天气服务请求并记录该位置的天气(这不是我将要做的,但作为一个Web服务的例子)?结果列出了他/她曾经去过的地方以及当时的天气情况。
我可以在后台进行网络连接和请求下载数据吗?或者我有限制?或者我只是受到我的过程所花费的时间的限制。
如果应用程序不断执行此操作,我确实理解电池和网络费用的陷阱。现在这是不重要的。只需在应用程序处于后台时查找有关下载数据的详细信息。
提前致谢 -
答案 0 :(得分:2)
您的应用不一定是因为您在后台注册了位置服务而在后台运行。当您的位置管理员发送位置事件时,它基本上被唤醒以处理您的委托调用。如果您的位置在一段时间内没有变化,该应用将被暂停,甚至可能会被终止。位置管理员会将其唤醒,当您处理新的位置事件时,您将有限时间工作。
如果您发起刷新数据的调用,包含在beginBackgroundTaskIdentifier和endBackgroundTaskIdentifier调用中,您应该有机会处理网络数据方法。我不认为你可以在后台开始这个过程或指望它在任何其他时间被处理并且可能被暂停。
psoft引用的链接可让您更好地了解如何在后台管理流程。
答案 1 :(得分:0)
系统可以并且会在暂停您的应用时拆除网络连接。我猜你现有的连接将有一些时间来完成他们的工作,无论是在“非活动”(转换)状态,还是在“背景”但在“暂停”状态之前。此外,您可以在转换为“已暂停”之前在“后台”中请求更多时间。阅读“后台执行和多任务处理”here。唯一可以维持网络连接的服务类型是报亭下载和VOIP应用程序。
答案 2 :(得分:0)
在我下载大型PDF的应用程序中,当用户点击主页按钮并将应用程序置于后台状态时,我只需使用此代码继续下载PDF最多10分钟:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}