我有一个 Swift 程序,它根据特定条件获取用户位置并将位置保存到本地数据库。
应用程序还可以在后台状态上运行。由于我需要获得非常准确的位置,因此最多可能需要 60 秒才能获得位置。如果在不到 5 秒的时间内确定位置,则当应用程序在后台运行时一切正常。如果获取位置需要超过 5 秒,则不会发生任何事情。我认为原因是因为您只有几秒钟来完成后台任务。
那么是否可以请求长达 60 秒的后台任务运行?我是否需要添加任何特殊代码来告诉操作系统请允许更多时间(最多 60 秒)来完成后台任务?
是的。
使用 UIApplication
函数beginBackgroundTaskWithExpirationHandler:
。在最新版本的iOS中,这给了你3分钟来完成你正在做的任何事情。有关更多信息,请参阅 Xcode 文档。
"beginBackgroundTaskWithExpirationHandler"
示例代码可以是这样的:
var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
func registerBackgroundTask() {
backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler {
[unowned self] in
self.endBackgroundTask()
}
assert(backgroundTask != UIBackgroundTaskInvalid)
}
func endBackgroundTask() {
NSLog("Background task ended.")
UIApplication.sharedApplication().endBackgroundTask(backgroundTask)
backgroundTask = UIBackgroundTaskInvalid
}
有关这方面的更多信息可以在本教程中找到有关背景模式的信息:Raywenderlich:背景模式 - Swift
苹果文档:背景模式
在后台运行应用程序并始终打开的最佳方法是保持启用 xcode 提供的后台模式
请参考 : https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial
还要在应用程序的 info.plist 中设置 Bool"应用程序不在后台运行"
希望这会有所帮助
谢谢