应用程序放置在后台时GCD调度操作未运行

时间:2012-03-21 20:12:07

标签: ios grand-central-dispatch

我使用dispatch_queue_create然后dispatch_async启动一个基本上是无限循环的方法(然后代码循环在调度块内)。

循环运行完美。但是,当应用程序变为背景时,它会暂停。然后它在应用程序占用前台时重新启动。

如何防止这种情况发生?我一直在寻找here,但似乎优先事项不是我可以选择的事情之一。

1 个答案:

答案 0 :(得分:5)

使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]方法启动后台任务。操作系统将给你10分钟,并在结束时调用expirationHandler块。

如果设备无法在后台运行代码或者必须使用的任务ID,此方法将返回 UIBackgroundTaskInvalid ,否则将返回。

你可以(并且应该)通过调用 - [UIApplication endBackgroundTask]来尽快结束它;

你可以在块的开头开始一个任务,并在它结束时结束它,如果它是一个无限循环,只需在applicationWillResignActive方法中启动一个任务,然后在applicationDidBecomeActive上结束它。但请记住,您只有十分钟,才能让您的应用有更多时间使用位置,音频或voip。