2012-08-12 70 views
0

我正在调查我的应用程序在运行时创建的调试文件,并且看到一个奇怪的行为: 应用程序使用NSURLConnction从服务器检索一些数据。连接已启动,然后用户通过按主页按钮(application:willResignActiveapplication:didEnterBackground方法被调用)将应用程序移动到可能的背景。 在调用application:didEnterBackground后,我可以看到在我的代码中处理了连接。 (NSURLConnection代表connectionDidFinishLoadingapplication:didEnterBackground之后被调用)。在执行connectionDidFinishLoading时,我执行了一些操作,但此时应用程序可能被暂停并且代码未被调用。 然后,用户在将近12小时后再次启动应用程序(未终止,但仅在后台运行),并且代码从停止运行的同一点继续运行,即使在调用application:willEnterForegroundapplication:didBecomeActive之前)。 它是否使场景? 在应用程序进入前台之前运行的代码部分改变了我的应用程序内部状态并导致奇怪的行为。进入后台后,应用程序是否继续执行网络操作?

任何想法如何解决它?

回答

0

收到application:didEnterBackground之后,你有5秒左右的时间完成整理工作,之后你的应用程序不再安排在CPU上。

就你而言,最好的解决方案是通过beginBackgroundTaskWithExpirationHandler:宣布后台工作的开始,并完成下载和相关任务。

+0

感谢您的回答。连接非常短,并在应用程序的5秒限制之前结束:didEnterBackground。我可以在调试文件中看到didEnterBackground被调用,然后几毫秒后连接结束(didFinishLoading被调用) – user1513930 2012-08-14 04:55:38

相关问题