是applicationDidEnterBackground
总是在iOS应用程序中调用applicationWillTerminate
之前?我知道applicationWillTerminate
并不总是被称为(多任务) - 但是当它被调用时,是applicationDidEnterBackground
总是先打电话?我不想将代码复制到applicationWillTerminate
中,如果它已包含在applicationDidEnterBackground
中,那么对于支持多任务处理的应用程序,我不想复制代码。ApplicationDidEnterBackground总是在applicationWillTerminate之前调用?
回答
在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
希望这会有所帮助。 :)
- 1. applicationWillTerminate/ApplicationDidEnterBackground issues
- 2. applicationWillTerminate和applicationDidEnterBackground不会被调用
- 3. 当应用程序崩溃时,'applicationWillTerminate'或'applicationDidEnterBackground'会被调用吗?
- 4. 越来越applicationWillTerminate和applicationDidEnterBackground工作
- 5. applicationDidEnterBackground和applicationWillTerminate在用户向上滑动时退出应用程序时调用
- 6. applicationWillTerminate在4.3中调用
- 7. applicationWillTerminate在调用时崩溃
- 8. applicationDidEnterBackground:未被调用
- 9. 手动调用applicationDidEnterBackground
- 10. 为什么在调用存储过程之前总是调用sp_sproc_columns?
- 11. applicationDidEnterBackground&applicationWillResignActive不被调用
- 12. Netbeans在调试之前总是运行maven build
- 13. VS2010不总是在调试之前构建
- 14. 如何在applicationDidEnterBackground中调用函数?
- 15. 在iOS4的applicationWillEnterForeground可能会叫applicationDidEnterBackground之前,它使问题
- 16. 在调用初始ViewController ViewDidLoad之前,CoreData和NSUserDefaults是否总是加载?
- 17. 总是调用当前类的方法
- 18. Android:onCreate之后总是调用onResume?
- 19. Android - onConfigurationChanged()在暂停之前调用Activity之前调用Activity
- 20. 设置DependencyProperty值时,是在调用Coercion之前还是之后调用Validation?
- 21. NSFetchedResultsController:我应该在调用-performFetch之前总是检查fetchedObjects == nil吗?
- 22. Android Loaders生命周期,或者:onStopLoading()总是在onReset()之前调用?
- 23. 在调用javascript函数之前总是会创建全局变量吗?
- 24. applicationDidEnterBackground
- 25. onResume在onMapReady之前调用
- 26. 在initWithNibName之前调用ViewDidLoad?
- 27. viewDidLoad在applicationDidFinishLaunching之前调用
- 28. viewDidLoad在init之前调用?
- 29. viewDidLoad在IBAction之前调用?
- 30. CGContextMoveToPoint在CGContextShowText之前调用
如果你是多任务处理,并且应用程序进入后台,为什么它应该在用户杀死之前再次通过'applicationDidEnterBackground'? – Larme
我的理解是,如果用户通过双击主页按钮并点击未调用applicationWillTerminate的红色减号按钮来杀死在后台运行的应用程序。让我知道如果我错了。 – SAHM
@Larme也许一个很好的问题是,当IS applicationWillTerminate调用一个支持多任务的应用程序时.. – SAHM