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