我正在开发在后台运行的iPhone应用程序(iOS4),并在下面的网址中引用Apple编写的“完成背景中的有限长度任务”
然后我就能够实现后台任务了。
(当然,我看到应用程序有10分钟的时间限制。)
但是,我仍然无法理解“bgTask = UIBackgroundTaskInvalid;
”(清单4-2中的第7,16行)的含义。
在我看来,从未达到过如上所示的界限。
因为之前有“endBackgroundTask:
”,后台任务将结束。
实际上,当我使用xcode调试器进行检查时,这种想法可能是正确的,并且无法在Line7,16处达到。
如果是这样,这条线是多余的吗? 或者有没有理由要写?
我将不胜感激任何帮助。 提前谢谢。
答案 0 :(得分:10)
如果在应用程序完成后台任务之前10分钟用完,则会调用块中的代码。
此块中的代码必须调用endBackground:
以指示应用程序已确认并接受该情况 - 如果不是,则应用程序将被终止。请注意,调用该方法不会终止应用程序 - 它只是向操作系统指示后台任务执行已完成。
第二行只是将bgTask
重置为中性值,而不是将其设置为不再存在的任务的id。这是一个整洁的事情,而不是必要的。
(如果第二行直到应用程序下一次被预先执行才会执行,我不会感到惊讶,因为一旦后台执行结束,应用程序就不会有任何CPU时间运行。但是没有测试过这个。
答案 1 :(得分:0)
理解它的关键是,您没有完成处理程序,而是拥有到期处理程序。它只执行该行作为清理'你的代码太长了。
要清理它有nuke / kill /结束你的后台任务。所以首先必须停止它:
[application endBackgroundTask:bgTask];
然后它还在任务上设置了一个标志,因此不会再次执行。
bgTask = UIBackgroundTaskInvalid;
你在代码中看到它两次的原因是:
[application endBackgroundTask:bgTask];
+ bgTask = UIBackgroundTaskInvalid;