Прежде всего, я хотел бы извиниться, если вы считаете мой вопрос фиктивным, я новичок в iOS и многопоточности и просто хочу понять, как обстоят дела. Насколько я знаю, didEnterBackground
— это последняя функция, которую iOS вызывает перед приостановкой приложения, и у приложения есть около 5 секунд, чтобы вернуться из нее, иначе iOS убьет приложение. В настоящее время я думаю о такой ситуации - у меня есть какая-то задача, которая выполняется в фоновом потоке (например, загрузка по сети), а ее блок завершения происходит в основном потоке. как это
fun downloadData() {
Downloader.download(url: "someUrl") { [weak self] in // download is on the background thread
DispatchQueue.main.async { [weak self] in // switch to main
// do some stuff
}
}
}
downloadData()
в настоящее время работает в фоновом потоке, пользователь нажимает кнопку «Домой», и приложение переходит в фоновый режим, и вызывается didEnterBackground
. В то время как основной поток выполняет код в didEnterBackground
downloadData
завершает загрузку, вызывается его завершение, и новая задача помещается в очередь основных потоков. Так что же будет в этом случае? Поскольку код из didEnterBackground
является последним, который может быть выполнен перед приостановкой, что произойдет с блоком завершения downloadData
, будет ли он также выполняться до приостановки (после didEnterBackground
) или он будет выполняться, когда пользователь вернется в приложение? , или он будет отброшен? Или такая ситуация вообще невозможна? Спасибо за помощь и еще раз извините, если мой вопрос некорректен.