调用didEnterBackground后是否可以在主线程上执行某些操作? 首先,我想说对不起,如果你考虑我的问题哑,我是新的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 } } }
调用didEnterBackground后是否可以在主线程上执行某些操作? 首先,我想说对不起,如果你考虑我的问题哑,我是新的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 } } },ios,swift,multithreading,ios-background-mode,ios-multithreading,Ios,Swift,Multithreading,Ios Background Mode,Ios Multithreading,downloadData()当前正在后台线程上运行,用户点击home按钮,应用程序进入后台并调用dienterbackground。当主线程执行didEnterBackgrounddownloadData中的代码时,下载完成并调用其完成,新任务被推送到主线程队列中。那么在这种情况下会发生什么呢?由于dienterbackground中的代码是在暂停之前可以执行的最后一个代码,downloadData的完成块会发生什么情况,它是否也会在暂停之前执行(在dienterbackground之后),还是
downloadData()
当前正在后台线程上运行,用户点击home按钮,应用程序进入后台并调用dienterbackground
。当主线程执行didEnterBackground
downloadData
中的代码时,下载完成并调用其完成,新任务被推送到主线程队列中。那么在这种情况下会发生什么呢?由于dienterbackground
中的代码是在暂停之前可以执行的最后一个代码,downloadData
的完成块会发生什么情况,它是否也会在暂停之前执行(在dienterbackground
之后),还是在用户返回应用程序后执行,或者它会被丢弃?还是这种情况根本不可能?谢谢您的帮助,再次抱歉,如果我的问题是不正确的。 首先,我建议您考虑这份文件提供。 文档本身很清楚,但我会仔细阅读,以提取与您的问题相匹配的重要信息
在本文档中,苹果明确表示,每个暂停的UI任务都将被丢弃,您不应向调度队列提交新任务,您应暂停当前队列并尽快释放资源 当应用程序应该被停用时,有两个步骤:applicationWillResignActive(:)
方法(或sceneWillResignActive(:)
,如果您使用sceneDelegate
)ApplicationIdentinterBackground(:)
方法(或ScenedIdentinterBackground(:)
)- 将用户数据保存到磁盘并关闭所有打开的文件
- 暂停调度和操作队列
- 不要计划执行任何新任务
- 使任何活动计时器无效
- 自动暂停游戏