首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"UIBackgroundTaskInvalid“是什么意思?

"UIBackgroundTaskInvalid“是什么意思?
EN

Stack Overflow用户
提问于 2011-01-01 01:08:11
回答 2查看 4.4K关注 0票数 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调试器时,这种想法可能是真的,并不适用于16岁的Line7。

如果是这样,这行是多余的吗?或者,有什么理由必须要写吗?

如果能帮上忙我将不胜感激。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-01-01 02:31:00

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

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

第二行只是简单地将bgTask重置为一个中性值,而不是让它设置一个不再存在的任务的id。这是一件整洁的事情,而不是必不可少的。

(如果第二行直到应用程序下一个前台才执行,我不会感到惊讶,因为一旦后台执行结束,应用程序就不会有任何CPU时间来运行。虽然还没有测试过这一点)

票数 10
EN

Stack Overflow用户

发布于 2017-04-25 03:03:00

理解它的关键是你有一个expirationHandler.而不是一个completionHandler它只是在“清理”你的代码时才执行这行代码,花了太长时间。

要清理它,需要使用nuke/kill/end你的后台任务。因此,首先它必须停止它:

代码语言:javascript
运行
复制
[application endBackgroundTask:bgTask];

然后,它还会在任务上设置一个标志,这样它就不会再次执行。

代码语言:javascript
运行
复制
bgTask = UIBackgroundTaskInvalid; 

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

  • It成功地在后台运行,并在调度block...so中完成,你需要通知应用程序,嘿,我完成了。
  • ,你不会在后台完成,但应用程序就像是时间到了!你必须通过做一个bgTask = UIBackgroundTaskInvalid;

+ go...clean来让你自己变得更好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4571327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档