applicationDidEnterBackground是否始终在applicationWillTerminate之前调用?

时间:2012-12-05 16:28:34

标签: ios lifecycle multitasking

在iOS应用中applicationDidEnterBackground之前是否始终会调用applicationWillTerminate?我知道applicationWillTerminate并不总是被调用(多任务处理) - 但是当它被调用时,applicationDidEnterBackground总是先被调用吗?对于支持多任务处理的应用,如果代码已applicationWillTerminate已包含在applicationDidEnterBackground中,我不想不必要地重复代码。

1 个答案:

答案 0 :(得分:5)

在ios 4.0及更高版本applicationDidEnterBackground中调用

而不是applicationWillTerminate,因此您无需同时调用它们。以下是Apple文档的一部分:

  

<强>讨论

     

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

     

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

     

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

     

该应用程序还发布了一个   UIApplicationDidEnterBackgroundNotification周围的通知   同时它调用此方法为感兴趣的对象提供机会   回应过渡。

     

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

希望这有助于为你解决问题。 阿德里安

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

希望这会有所帮助。 :)