我有一个Swift程序,它根据特定条件获取用户位置,并将位置保存到本地数据库。
应用程序也可以在后台状态下运行。因为我需要得到一个非常准确的位置,所以可能需要60秒才能得到位置。如果在不到5秒内确定位置,则当应用程序在后台运行时,一切工作正常。如果获取位置的时间超过5秒,则不会发生任何事情。我认为原因是因为您只有几秒钟的时间来完成后台任务。
那么,是否可以请求长达60秒的时间来运行后台任务?我是否需要添加任何特殊代码来告诉操作系统请留出更多时间(最多60秒)来完成后台任务?
发布于 2016-03-22 08:40:32
是。
使用UIApplication函数beginBackgroundTaskWithExpirationHandler:。在最近的iOS版本中,它给你3分钟的时间来完成你正在做的任何事情。有关更多信息,请参阅Xcode文档。
发布于 2016-03-22 11:46:22
你可以使用'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
发布于 2016-03-22 12:57:31
在后台运行应用程序并始终打开的最好方法是保持启用xcode it self提供的后台模式
请参阅:https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial
还要在应用程序的info.plist中设置布尔值“应用程序不在后台运行”
希望这能有所帮助
谢谢
https://stackoverflow.com/questions/36143003
复制相似问题