我正在开发在后台运行的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调试器时,这种想法可能是真的,并不适用于16岁的Line7。
如果是这样,这行是多余的吗?或者,有什么理由必须要写吗?
如果能帮上忙我将不胜感激。提前谢谢。
发布于 2011-01-01 02:31:00
如果在应用程序完成其后台任务之前10分钟就用完了,则调用块中的代码。
此块中的代码必须调用endBackground:
来指示应用程序已确认并接受此情况-如果未确认并接受,则应用程序将被终止。请注意,调用该方法并不会终止应用程序-它只是向操作系统表明后台任务执行已经完成。
第二行只是简单地将bgTask
重置为一个中性值,而不是让它设置一个不再存在的任务的id。这是一件整洁的事情,而不是必不可少的。
(如果第二行直到应用程序下一个前台才执行,我不会感到惊讶,因为一旦后台执行结束,应用程序就不会有任何CPU时间来运行。虽然还没有测试过这一点)
发布于 2017-04-25 03:03:00
理解它的关键是你有一个expirationHandler.而不是一个completionHandler它只是在“清理”你的代码时才执行这行代码,花了太长时间。
要清理它,需要使用nuke/kill/end你的后台任务。因此,首先它必须停止它:
[application endBackgroundTask:bgTask];
然后,它还会在任务上设置一个标志,这样它就不会再次执行。
bgTask = UIBackgroundTaskInvalid;
您在代码中看到它两次的原因是:
bgTask = UIBackgroundTaskInvalid;
+ go...clean来让你自己变得更好
https://stackoverflow.com/questions/4571327
复制相似问题