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

Dan*_*ark 3 grand-central-dispatch ios

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

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

我怎样才能防止这种情况发生?我一直在这里,但似乎优先权不是我可以选择的事情之一.

fbe*_*rdo 5

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

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

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

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