【发布时间】:2020-08-24 14:49:02
【问题描述】:
首先,如果您认为我的问题很愚蠢,我想说声抱歉,我是 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 之后)或者它会在暂停之前执行用户将返回应用程序,还是将其丢弃?或者这种情况根本不可能?感谢您的帮助,如果我的问题不正确,再次抱歉。
【问题讨论】:
标签: ios swift multithreading ios-background-mode ios-multithreading