在iOS应用中applicationDidEnterBackground
之前是否始终会调用applicationWillTerminate
?我知道applicationWillTerminate
并不总是被调用(多任务处理) - 但是当它被调用时,applicationDidEnterBackground
总是先被调用吗?对于支持多任务处理的应用,如果代码已applicationWillTerminate
已包含在applicationDidEnterBackground
中,我不想不必要地重复代码。
答案 0 :(得分:5)
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
希望这会有所帮助。 :)