Ios 如何编写当用户按下home按钮时不会暂停的代码

Ios 如何编写当用户按下home按钮时不会暂停的代码,ios,swift,Ios,Swift,我想在我的ios应用程序中实现图像同步。为此,我所做的是 拍照 将照片上传到firebase 获取firebase存储的url并将其发送到api服务器,以便服务器将该信息存储到数据库中 只要应用程序还在运行,它就可以正常工作,但当我按home按钮退出应用程序时,一切都会暂停 那么,如果应用程序转到主页,如何运行不会暂停的代码呢?根据本文档 对于需要更多执行时间才能执行的任务,必须 请求特定权限以在后台运行它们,而无需 他们被停职。在iOS中,仅允许使用特定的应用程序类型 在后台运行: 在后台向用

我想在我的ios应用程序中实现图像同步。为此,我所做的是

拍照 将照片上传到firebase 获取firebase存储的url并将其发送到api服务器,以便服务器将该信息存储到数据库中 只要应用程序还在运行,它就可以正常工作,但当我按home按钮退出应用程序时,一切都会暂停


那么,如果应用程序转到主页,如何运行不会暂停的代码呢?

根据本文档

对于需要更多执行时间才能执行的任务,必须 请求特定权限以在后台运行它们,而无需 他们被停职。在iOS中,仅允许使用特定的应用程序类型 在后台运行:

在后台向用户播放音频内容的应用程序, 例如音乐播放器应用程序

在中录制音频内容的应用程序 让用户随时了解其位置的后台应用程序 时间,例如导航应用程序

支持互联网语音的应用程序 需要下载和处理新内容的协议VoIP应用程序 定期

从外部附件接收定期更新的应用程序

实现这些服务的应用程序必须声明它们提供的服务 支持并使用系统框架来实现 那些服务

声明服务可以让系统知道 您使用的服务,但在某些情况下是系统框架 实际上防止您的应用程序被挂起

链接:

以下是如何实施以下步骤:


[Swift3]这对我来说很有用

func doUpdate () {
    DispatchQueue.global(qos: .background).async {
        let taskID = self.beginBackgroundUpdateTask()
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: {
            print("printing after 10 min")
        })
        DispatchQueue.main.async {
            self.endBackgroundUpdateTask(taskID: taskID)
        }
    }
}


func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier {
    return UIApplication.shared.beginBackgroundTask(expirationHandler: {})
}


func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) {
    UIApplication.shared.endBackgroundTask(taskID)
}

由于我发现swift 3出现expirationHandler获取错误,因此不确定最长完成时间是多少。你能更新一下答案吗?不幸的是,我对快速编程没有经验。上面的代码是从SO的答案中引用的。根据本教程,在过去,此模式通常用于完成上传或下载,并提供慷慨但不保证10分钟的时间来完成这些任务。
func doUpdate () {
    DispatchQueue.global(qos: .background).async {
        let taskID = self.beginBackgroundUpdateTask()
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: {
            print("printing after 10 min")
        })
        DispatchQueue.main.async {
            self.endBackgroundUpdateTask(taskID: taskID)
        }
    }
}


func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier {
    return UIApplication.shared.beginBackgroundTask(expirationHandler: {})
}


func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) {
    UIApplication.shared.endBackgroundTask(taskID)
}