如何允许应用程序在后台运行更长时间

时间:2016-03-21 22:42:29

标签: ios iphone swift

我有一个Swift程序,它根据特定条件获取用户位置,并将位置保存到本地数据库。

应用程序也可以在后台状态下运行。由于我需要获得非常准确的位置,因此最多可能需要60秒才能获得该位置。如果在不到5秒的时间内确定位置,那么当应用程序在后台运行时,一切正常。如果获得该位置需要超过5秒,那么什么都不会发生。我认为原因是因为你只有几秒钟的时间来完成后台任务。

因此可以请求最多60秒的后台任务运行吗?我是否需要添加任何特殊代码来告诉操作系统是否需要更多时间(最多60秒)才能完成后台任务?

3 个答案:

答案 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“应用程序不在后台运行”

希望这会有所帮助

谢谢