当应用程序放置在后台时,GCD调度操作不能运行

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

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

我怎样才能防止这种情况发生? 我一直在这里看,但似乎优先事项不是我可以select的东西之一。

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

如果设备无法在后台运行代码,则该方法将返回UIBackgroundTaskInvalid,否则返回UIBackgroundTaskInvalid

你可以(也应该)通过调用 – [UIApplication endBackgroundTask]来更快地结束它。

您可以在块的开始处启动任务,并在结束时结束,如果是无限循环,则只需在applicationWillResignActive方法中启动一个任务,然后在applicationDidBecomeActive上结束。 但请记住,你只有十分钟的时间 ,有更多的时间你的应用程序将不得不使用位置,audio或voip。