当应用程序置于后台时,GCD调度操作未运行



我启动了一个方法,本质上是一个使用dispatch_queue_createdispatch_async的无休止循环(然后代码循环在调度的块内)。

这个循环运行得很完美。但是,当应用程序返回时,它会暂停。然后,当应用程序进入前台时,它会重新启动。

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

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

如果设备无法在后台运行代码,或者必须使用任务id来结束它,则此方法将返回UIBackgroundTaskInvalid

您可以(也应该)通过调用-[UIApplication endBackgroundTask]更快地结束它;

您可能可以在块的开头开始一个任务,并在它结束时结束它,如果它是一个无休止的循环,只需在applicationWillResignActive方法中启动一个任务并在applicationDidBecomeActive上结束它。但请记住,您只有十分钟的时间,为了有更多的时间,您的应用程序必须使用定位、音频或voip。

最新更新