dispatch_async vs beginBackgroundTaskWithExpirationHandler

时间:2012-10-22 17:44:36

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

我需要在iOS应用中实现后台进程,每60秒执行一次作业。我知道这只能在应用程序聚焦时完成,但我确实希望这个工作在关闭应用程序后在后台运行完毕。我将使用GCD调度一个定时器,该定时器每隔60秒使用dispatch_asyncbeginBackgroundTaskWithExpirationHandler异步调用我的作业。

我想知道哪种方法最好,或者它们基本相同。即使应用程序在前台,也可以使用beginBackgroundTaskWithExpirationHandler执行作业吗?或者我最好在应用程序状态更改时尝试取消作业,然后将作业重新启动作为后台任务?

1 个答案:

答案 0 :(得分:2)

-beginBackgroundTaskWithExpirationHandler:不在后台线程/队列上运行代码。它告诉操作系统,当您的应用程序未处于活动状态时,您将继续工作。

这两者完全不同。