我正在查看我的应用程序在运行时创建的调试文件并看到一个奇怪的行为:
该应用程序使用NSURLConnction
从服务器检索一些数据。连接已启动,然后用户可以通过按主页按钮将应用程序移动到后台(application:willResignActive
和application:didEnterBackground
方法被调用)。
在application:didEnterBackground
被调用之后,我可以看到连接是在我的代码中处理的。 (在connectionDidFinishLoading
之后调用NSURLConnection
代理的application:didEnterBackground
。在connectionDidFinishLoading
的实现中,我执行了一些操作,但此时应用程序很可能被挂起并且代码未被调用。
然后在用了近12个小时之后,用户再次启动了应用程序(它没有终止,但只是在后台)并且代码在停止的同一点继续运行,甚至在调用application:willEnterForeground
和application:didBecomeActive
之前)。
这是场景吗?
在应用程序进入前台之前运行的代码部分改变了我的应用程序内部状态并导致奇怪的行为。
任何想法如何解决?
答案 0 :(得分:0)
收到application:didEnterBackground
后,你有大约5秒的时间完成整理工作,之后你的应用程序不再被安排在cpu上。
在您的情况下,最佳解决方案是通过beginBackgroundTaskWithExpirationHandler:
宣布开始后台工作并完成下载和相关任务。