我想在ios应用中实现图片同步。为此,我所做的是
只要应用程序正在运行,它就可以正常运行,但是当我从应用程序退出按主页按钮时,一切都会暂停。
那么,如果应用程序进入主页,如何运行不会暂停的代码?
答案 0 :(得分:1)
根据此文档,
对于需要执行更多执行时间的任务,您必须这样做 请求特定权限,以便在后台运行它们 他们被停职了。在iOS中,只允许使用特定的应用类型 在后台运行:
在后台播放用户可听内容的应用, 比如音乐播放器应用
在内容中录制音频内容的应用 后台应用程序,让用户了解他们的位置 时间,例如导航应用
支持互联网语音的应用 协议(VoIP)需要下载和处理新内容的应用程序 定期
从外部附件接收定期更新的应用
实施这些服务的应用必须声明他们的服务 支持和使用系统框架来实现相关方面 那些服务
声明服务让系统知道哪个 您使用的服务,但在某些情况下,它是系统框架 实际上会阻止您的申请被暂停。
以下是如何实施(摘自this answer的Ashley Mills):
func doUpdate () { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { let taskID = beginBackgroundUpdateTask() var response: NSURLResponse?, error: NSError?, request: NSURLRequest? let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error) // Do something with the result endBackgroundUpdateTask(taskID) }) } func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier { return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({}) } func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) { UIApplication.sharedApplication().endBackgroundTask(taskID) }
答案 1 :(得分:0)
[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)
}
不确定完成此操作的最长时间是什么,因为我看到有expirationHandler