Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Expiration处理程序从未调用beginBackgroundTask(名称:expirationHandler:)_Ios_Swift_Ios13_Background Task - Fatal编程技术网

Ios Expiration处理程序从未调用beginBackgroundTask(名称:expirationHandler:)

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

在将iOS应用程序(iOS 13.1)放到后台之前,我正在尝试运行一些最后的处理,并正在使用一个非常基本的示例来了解发生了什么:

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并停止。为了了解更多内容,我在实际设备上运行

  • 为什么过期处理程序print语句没有出现?不应该调用过期处理程序吗
  • 人们一直说他们通常有3分钟左右的时间,但我的时间不到1分钟,这有什么原因吗
  • 在我的测试中,AppDelegate方法to
    applicationidenterdbackground
    也没有被调用,至少应该调用这个方法吗
  • 是否有任何原因可以缩短文件处理时间,因为我正在尝试编写一些文件,但在停止之前,我似乎只有大约15秒的处理时间

  • 任何建议或见解将不胜感激,谢谢

    当你的应用程序已经在后台时,你需要开始后台任务,因此在
    didEnterBackground
    或在didEnterBackground通知的处理程序中,你是否在项目设置中启用了后台功能?否则它将不起作用。当您不使用此api来扩展应用程序终止时,默认情况下,iOS会给您5秒时间来完成任何关键任务。@AnshulSharma是的,我添加了此功能。@Paulw11文档指定在进入后台之前调用“在开始任务之前尽早调用此方法,最好在应用程序实际进入后台之前。”您还应将循环分派到另一个队列。不要在主队列上睡眠。