“UIBackgroundTaskInvalid”是什么意思?

时间:2010-12-31 17:08:11

标签: iphone objective-c ios4 background

我正在开发在后台运行的iPhone应用程序(iOS4),并在下面的网址中引用Apple编写的“完成背景中的有限长度任务”

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调试器进行检查时,这种想法可能是正确的,并且无法在Line7,16处达到。

如果是这样,这条线是多余的吗? 或者有没有理由要写?

我将不胜感激任何帮助。 提前谢谢。

2 个答案:

答案 0 :(得分:10)

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

此块中的代码必须调用endBackground:以指示应用程序已确认并接受该情况 - 如果不是,则应用程序将被终止。请注意,调用该方法不会终止应用程序 - 它只是向操作系统指示后台任务执行已完成。

第二行只是将bgTask重置为中性值,而不是将其设置为不再存在的任务的id。这是一个整洁的事情,而不是必要的。

(如果第二行直到应用程序下一次被预先执行才会执行,我不会感到惊讶,因为一旦后台执行结束,应用程序就不会有任何CPU时间运行。但是没有测试过这个。

答案 1 :(得分:0)

理解它的关键是,您没有完成处理程序,而是拥有到期处理程序。它只执行该行作为清理'你的代码太长了。

要清理它有nuke / kill /结束你的后台任务。所以首先必须停止它:

[application endBackgroundTask:bgTask];

然后它还在任务上设置了一个标志,因此不会再次执行。

bgTask = UIBackgroundTaskInvalid; 

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

  • 成功在后台运行并在调度块中完成...所以你需要通知应用程序我已经完成了。
  • 在后台没有完成,但应用就像时间一样!你得去......通过[application endBackgroundTask:bgTask]; + bgTask = UIBackgroundTaskInvalid;
  • 来清理自己