"UIBackgroundTaskInvalid"是什么意思?

4

我正在开发一个在后台运行的iPhone应用程序(iOS4),并参考苹果公司在以下网址上写的“在后台完成有限长度任务”的内容。

http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5

我已经能够实现后台任务。(当然,我知道应用程序有10分钟的时间限制。) 但是,我仍然不理解 "bgTask = UIBackgroundTaskInvalid;" (第4-2页的第7行、16行) 的含义。
在我看来,上述显示的行从未被执行。因为在那之前有 "endBackgroundTask:",并且后台任务将被结束。实际上,当我使用xcode调试器进行检查时,这种想法可能是正确的,并且不会到达第7行、16行。
如果是这样,这行代码是否多余?还是有必须要写的原因?
我非常感谢任何关于此事的帮助。提前致谢。
2个回答

10

如果应用程序在后台任务完成之前运行了10分钟,则会调用块中的代码。

该块中的代码必须调用endBackground:来表示应用程序已经知道并接受了这种情况 - 如果没有,应用程序将被终止。请注意,调用该方法不会终止应用程序 - 它只是向操作系统表示后台任务执行已完成。

第二行只是将bgTask重置为中性值,而不是让它保持一项不存在的任务标识。这只是一个整洁的问题,而不是必要的。

(如果应用程序不再获取任何CPU时间以运行,我不会感到惊讶,直到下次进入前台时才执行第二行。虽然没有测试过)


0
理解它的关键在于,与其拥有一个“完成”处理程序,你需要一个“过期”处理程序。它只会执行那一行代码作为你的代码太长的“清理”。
为了清理它,它必须消除/终止/结束你的后台任务。因此,首先它必须停止它:
[application endBackgroundTask:bgTask];

然后它还会在任务上设置一个标志,以便它不会再次被执行。

bgTask = UIBackgroundTaskInvalid; 

你在代码中看到两次的原因是因为:

  • 它在后台成功地运行并在调度块中完成...所以你需要通知应用程序,嘿,我完成了。
  • 你没有在后台完成,但应用程序已经超时了!你必须走了...通过执行[application endBackgroundTask:bgTask];+bgTask = UIBackgroundTaskInvalid;来清理自己。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接