Обработчик истечения никогда не вызывался для beginBackgroundTask (withName: expirationHandler :) - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь выполнить некоторую финальную обработку, прежде чем приложение 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)

Когда я запускаю код, я нажимаю кнопку «Домой», чтобы открыть приложение в фоновом режиме, а затем консоль печатает до 55 и останавливается. Для большего контекста я работаю на реальном устройстве.

  1. Почему не отображается оператор печати обработчика срока действия? Разве не должен вызываться обработчик истечения срока действия?
  2. Люди говорили, что обычно у них около 3 минут, а у меня меньше 1 минуты, есть ли причина, по которой он короче?
  3. AppDelegateметод applicationDidEnterBackground также не вызывался в моем тестировании, разве этот метод не должен вызываться по крайней мере?
  4. Есть ли какая-либо причина, по которой при обработке файлов это будет короче, потому что я пытаюсьнапишите некоторые файлы, но мне кажется, у меня уходит всего 15 секунд на обработку, прежде чем она остановится.

Буду признателен за любые советы или советы, спасибо!

...