我使用dispatch_queue_create
然后dispatch_async
启动一个基本上是无限循环的方法(然后代码循环在调度块内)。
循环运行完美。但是,当应用程序变为背景时,它会暂停。然后它在应用程序占用前台时重新启动。
如何防止这种情况发生?我一直在寻找here,但似乎优先事项不是我可以选择的事情之一。
答案 0 :(得分:5)
使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]方法启动后台任务。操作系统将给你10分钟,并在结束时调用expirationHandler块。
如果设备无法在后台运行代码或者必须使用的任务ID,此方法将返回 UIBackgroundTaskInvalid ,否则将返回。
你可以(并且应该)通过调用 - [UIApplication endBackgroundTask]来尽快结束它;
你可以在块的开头开始一个任务,并在它结束时结束它,如果它是一个无限循环,只需在applicationWillResignActive方法中启动一个任务,然后在applicationDidBecomeActive上结束它。但请记住,您只有十分钟,才能让您的应用有更多时间使用位置,音频或voip。