我有一个Swift程序,它根据特定条件获取用户位置,并将位置保存到本地数据库。
应用程序也可以在后台状态下运行。由于我需要获得非常准确的位置,因此最多可能需要60秒才能获得该位置。如果在不到5秒的时间内确定位置,那么当应用程序在后台运行时,一切正常。如果获得该位置需要超过5秒,那么什么都不会发生。我认为原因是因为你只有几秒钟的时间来完成后台任务。
因此可以请求最多60秒的后台任务运行吗?我是否需要添加任何特殊代码来告诉操作系统是否需要更多时间(最多60秒)才能完成后台任务?
答案 0 :(得分:1)
是
使用UIApplication
函数beginBackgroundTaskWithExpirationHandler:
。在iOS的最新版本中,您可以在3分钟内完成您正在做的任何事情。有关更多信息,请参阅Xcode文档。
答案 1 :(得分:0)
你可以使用' 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:Background modes - Swift
Apple Doc: Background Modes
答案 2 :(得分:0)
在后台运行应用程序并始终打开的最佳方法是继续启用xcode自带的后台模式
请参阅:https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial
还在应用程序的info.plist中设置Bool“应用程序不在后台运行”
希望这会有所帮助
谢谢