SAH*_*AHM 7 lifecycle multitasking ios
applicationDidEnterBackground以前是否总是applicationWillTerminate在iOS应用程序中调用?我知道applicationWillTerminate并不总是被称为(多任务处理) - 但是当它被调用时,applicationDidEnterBackground总是先调用吗?对于支持多任务处理的应用程序,applicationWillTerminate如果代码已经包含在内applicationDidEnterBackground,我不想不必要地重复代码.
在ios 4.0及更高版本applicationDidEnterBackground中调用,而不是applicationWillTerminate因此您不必同时调用它们.以下是Apple文档的一部分:
讨论
在iOS 4.0及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法而不是applicationWillTerminate:方法.您应该使用此方法释放共享资源,保存用户数据,使计时器无效,并存储足够的应用程序状态信息,以便将应用程序恢复到当前状态,以防以后终止.您还应该禁用应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库).您还必须避免在后台使用OpenGL ES.
您执行此方法大约需要五秒钟来执行任何任务并返回.如果您需要额外的时间来执行任何最终任务,可以通过调用beginBackgroundTaskWithExpirationHandler:从系统请求额外的执行时间.实际上,您应该尽快从applicationDidEnterBackground返回:如果方法在时间用完之前没有返回,则应用程序将终止并从内存中清除.
在此方法退出之前,您应执行与调整用户界面相关的任何任务,但应根据需要将其他任务(如保存状态)移动到并发调度队列或辅助线程.因为您可能在applicationDidEnterBackground中启动任何后台任务:在该方法退出之前不会运行,您应该在启动这些任务之前请求额外的后台执行时间.换句话说,首先调用beginBackgroundTaskWithExpirationHandler:然后在调度队列或辅助线程上运行任务.
该应用程序还会在调用此方法的同时发布UIApplicationDidEnterBackgroundNotification通知,以便为感兴趣的对象提供响应转换的机会.
有关如何正常过渡到后台的更多信息,以及有关如何在退出时启动后台任务的信息,请参阅iOS应用程序编程指南.
希望这有助于为你解决问题.阿德里安
以下是开发人员部分提供的技术说明的链接.它正在处理网络和多任务处理.本文档中使用的实际方法仅适用于applicationDidEnterBackgroundiOS 5,因为它们有一个名为watchdog的系统,如果网络自动无响应,它会终止应用程序.因此,无需实际调用applicationWillTerminate并尝试执行代码,以允许您的应用在应用终止之前完成其任务.该应用程序将进入后台并将继续其任务,直到最后一个任务完成.我希望这是有道理的,但这里是链接.请阅读看门狗部分.
https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841
希望这可以帮助.:)
| 归档时间: |
|
| 查看次数: |
4419 次 |
| 最近记录: |