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

Continue getting data in background mode

我正在从服务器获取数据并向用户显示百分比。但是当我点击 phone 主页按钮时(我的意思是我的应用程序处于后台模式。不是杀死它)进程停止。当我再次打开应用程序时,它会继续。 我应该怎么做才能在后台模式下继续获取数据?

据我所知,除非您的应用正在播放音乐或获取位置更新,否则 OS 不会让您的应用在后台无休止地工作。

您可以直接告诉 OS 您的应用程序需要一些时间来结束任务,但通常不会超过一分钟或两分钟。

这里有后台模式的教程,希望对你有帮助...

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

确保您已签入后台模式:

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

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-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()。