2012-12-05 40 views
7

applicationDidEnterBackground总是在iOS应用程序中调用applicationWillTerminate之前?我知道applicationWillTerminate并不总是被称为(多任务) - 但是当它被调用时,是applicationDidEnterBackground总是先打电话?我不想将代码复制到applicationWillTerminate中,如果它已包含在applicationDidEnterBackground中,那么对于支持多任务处理的应用程序,我不想复制代码。ApplicationDidEnterBackground总是在applicationWillTerminate之前调用?

+0

如果你是多任务处理,并且应用程序进入后台,为什么它应该在用户杀死之前再次通过'applicationDidEnterBackground'? – Larme

+0

我的理解是,如果用户通过双击主页按钮并点击未调用applicationWillTerminate的红色减号按钮来杀死在后台运行的应用程序。让我知道如果我错了。 – SAHM

+0

@Larme也许一个很好的问题是,当IS applicationWillTerminate调用一个支持多任务的应用程序时.. – SAHM

回答

5

在ios 4.0及更高版本中applicationDidEnterBackground被调用而不是applicationWillTerminate因此您不必调用它们两个。这里是苹果文档的所述部分:

讨论

在iOS中4.0和更高,这种方法,而不是称为 applicationWillTerminate的:方法当用户退出支持背景执行的应用 。您应该使用此方法来释放共享资源,保存用户数据,使无效的定时器和 足够的应用程序状态信息来将您的应用程序恢复到 其当前状态,以防稍后终止。您还应该禁止更新应用程序的用户界面,并避免使用某些类型的共享系统资源(例如用户的联系人 数据库) 。避免在背景中使用OpenGL ES也是必不可少的。

你的这个方法的实现有大约五秒到 执行任何任务并返回。如果您需要更多时间执行 任何最终任务,则可以通过调用beginBackgroundTaskWithExpirationHandler:来请求 系统的额外执行时间。在 的练习中,您应该尽快从applicationDidEnterBackground:as 快速返回。如果在时间运行前该方法没有返回,则应用程序终止并从内存中清除。

在退出此方法之前,您应该执行与调整用户界面 有关的任何任务,但根据需要将其他任务(例如保存状态)应该移动到并发调度队列或辅助线程。 因为它可能是您在 开始的任何后台任务applicationDidEnterBackground:将不会运行,直到方法 退出后,您应该在 开始这些任务之前请求额外的后台执行时间。换句话说,首先调用 beginBackgroundTaskWithExpirationHandler:然后在 调度队列或辅助线程上运行任务。

该应用程序还张贴在其周围会调用这个方法让感兴趣的对象有机会 的过渡响应的 同时 UIApplicationDidEnterBackgroundNotification时通知。

有关如何优雅地转换到 背景的更多信息,以及有关如何在 退出时间开始后台任务的信息,请参阅iOS应用程序编程指南。

希望这有助于为您解决问题的人。 Adrian

以下是开发人员部分提供的技术说明的链接。它正在处理网络和多任务处理。本文档中使用的实际方法仅处理applicationDidEnterBackground,而自iOS 5以来,它们有一个名为的监视器,如果网络自动无响应,它将终止该应用程序。因此,没有必要实际调用applicationWillTerminate并尝试执行代码以允许您的应用在应用终止之前完成其任务。该应用程序将进入后台并将继续其任务,直到完成最后一项任务。我希望这是有道理的,但这里是链接。请阅读看门狗部分。 https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841

希望这会有所帮助。 :)

+0

谢谢,我明白,并且我有applicationDidEnterBackground中的所有必需的代码。我只是想弄清楚在applicationWillTerminate中包含哪些代码以及哪些代码没有出现。 – SAHM

+0

我确实很欣赏关于超时applicationDidEnterBackground的评论。 – SAHM

+0

我什至不会调用任何应用程序将终止方法了。在创建必要的视图时,我会将其保留为默认值。从ios 5开始,我一直在调用应用程序中的所有方法都进入后台,对我来说它工作得很好。我不知道任何其他的事情。 –

相关问题