继续在后台模式下获取数据

时间:2019-12-12 11:07:33

标签: ios swift swift3

我正在从服务器获取数据并向用户显示百分比。但是,当我单击“电话回家”按钮时(我的意思是我的应用程序处于后台模式。没有杀死它),过程停止了。当我再次打开应用程序时,它将继续。 我该怎么做才能继续在后台模式下获取数据?

3 个答案:

答案 0 :(得分:0)

据我所知,除非您的应用正在播放音乐或进行位置更新,否则操作系统将不会让您的应用在无休止的时间内在后台工作。

您可以告诉操作系统您的应用需要一些时间才能完成任务,但通常两分钟之内,您得到的矿石不会多于一个矿石。

这里有一个有关背景模式的教程,希望对您有帮助...

https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started

答案 1 :(得分:0)

确保您已签入后台模式:

您的应用->目标:您的应用->签名和功能->检查后台模式

ViewDidLoad()

let app = UIApplication.shared

NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive(notification:)), name: UIApplication.willResignActiveNotification, object: app)

NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive(notification:)), name: UIApplication.didBecomeActiveNotification, object: app)

viewDidLoad 下,您可以添加

@objc func applicationWillResignActive(notification: NSNotification){
        print("Entered background")
    }

@objc func didBecomeActive(notification: NSNotification){
        print("Returned to application")
    }

因此,在 applicationWillResignActive 内部,您只需调用该方法即可继续阅读。

我希望这是您想要的,否则我可以尝试对其进行尽可能多的编辑。

答案 2 :(得分:0)

您可以使用以下功能,让您的操作在后台运行2-3分钟。

  var aBackgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid


func registerBackgroundTask() {
        aBackgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
              self?.endBackgroundTask()
        }
        assert(callLoggingBackgroundTask != UIBackgroundTaskIdentifier.invalid)
    }


func endBackgroundTask() {
    print("Background task ended.")
    UIApplication.shared.endBackgroundTask(convertToUIBackgroundTaskIdentifier(callLoggingBackgroundTask.rawValue))
    aBackgroundTask = UIBackgroundTaskIdentifier.invalid
}

操作开始时调用函数registerBackgroundTask(),操作完成时调用该函数endBackgroundTask()。