Ios Expiration处理程序从未调用beginBackgroundTask(名称:expirationHandler:)
在将iOS应用程序(iOS 13.1)放到后台之前,我正在尝试运行一些最后的处理,并正在使用一个非常基本的示例来了解发生了什么:Ios Expiration处理程序从未调用beginBackgroundTask(名称:expirationHandler:),ios,swift,ios13,background-task,Ios,Swift,Ios13,Background Task,在将iOS应用程序(iOS 13.1)放到后台之前,我正在尝试运行一些最后的处理,并正在使用一个非常基本的示例来了解发生了什么: let identifier = UIApplication.shared.beginBackgroundTask(withName: "mywork", expirationHandler: { print("Expiration handler called") }) for i in 1...500 { print("[\(Date())] Step
let identifier = UIApplication.shared.beginBackgroundTask(withName: "mywork", expirationHandler: {
print("Expiration handler called")
})
for i in 1...500 {
print("[\(Date())] Step \(i)")
sleep(1)
}
UIApplication.shared.endBackgroundTask(identifier)
当我运行代码时,我点击home按钮在后台启动but应用程序,然后控制台打印到55并停止。为了了解更多内容,我在实际设备上运行
applicationidenterdbackground
也没有被调用,至少应该调用这个方法吗任何建议或见解将不胜感激,谢谢 当你的应用程序已经在后台时,你需要开始后台任务,因此在
didEnterBackground
或在didEnterBackground通知的处理程序中,你是否在项目设置中启用了后台功能?否则它将不起作用。当您不使用此api来扩展应用程序终止时,默认情况下,iOS会给您5秒时间来完成任何关键任务。@AnshulSharma是的,我添加了此功能。@Paulw11文档指定在进入后台之前调用“在开始任务之前尽早调用此方法,最好在应用程序实际进入后台之前。”您还应将循环分派到另一个队列。不要在主队列上睡眠。