当应用程序在iOS中进入非活动/后台/暂停状态时,调度队列中的任务会发生什么?

时间:2011-07-31 13:44:02

标签: objective-c ios grand-central-dispatch

我一直在搜索Apple关于应用程序状态和Grand Central Dispatch的文档,但我没有找到这个问题的好答案。

根据Apple的文档,在iOS 4.0上:

  

应用程序在后台但不执行代码。该   系统自动将应用程序移动到此状态   适当的时候。暂停时,应用程序本质上是   冻结在当前状态,不执行任何代码。   在低内存条件下,系统可能会清除暂停   没有通知的应用程序为前景腾出更多空间   应用

假设系统没有清除已挂起的应用程序(暂停 - >未运行转换),那么当前在调度队列中执行的任务会发生什么?短语“基本冻干”还有很多不足之处 - 冻结干燥的是什么?

我的解释是当应用程序转换回活动状态时,应用程序在暂停时使用的GCD队列需要恢复;根据这种解释,暂停前GCD队列中存在的任务将消失。我的解释是否正确?

1 个答案:

答案 0 :(得分:18)

当应用暂停时,整个过程都会被冻结。一旦恢复,你可以指望恢复过程,好像什么都没发生一样。您的应用程序的GCD逻辑队列不会消失,它们会保留在内存中。并且GCD在您的进程中创建的线程为您的队列提供服务,恢复原状,就像没有发生任何事情一样。

所以你的解释是不正确的:暂停前GCD队列中存在的任务在恢复时不会消失。他们从未离开;他们只是暂停了。