0

我正在查看我的应用程序在运行时创建的调试文件,并看到一个奇怪的行为:应用程序用于NSURLConnction从服务器检索一些数据。连接已启动,然后用户可能通过按下主页按钮将应用程序移动到后台(application:willResignActiveapplication:didEnterBackground调用了方法)。我可以看到application:didEnterBackground调用后在我的代码中处理了连接。(委托的被称为之后connectionDidFinishLoading)。在执行过程中我执行了一些操作,但此时应用程序可能已挂起并且未调用代码。然后在将近 12 小时后,用户再次启动应用程序(它没有终止,而只是在后台)并且代码从它停止的同一点继续运行,甚至在之前NSURLConnectionapplication:didEnterBackgroundconnectionDidFinishLoadingapplication:willEnterForeground并被application:didBecomeActive调用)。它会做场景吗?在应用程序进入前台之前运行的部分代码改变了我的应用程序内部状态并导致奇怪的行为。

任何想法如何解决它?

4

1 回答 1

0

收到后,application:didEnterBackground您有大约 5 秒的时间来完成整理工作,之后您的应用程序将不再被安排在 cpu 上。

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

于 2012-08-12T16:57:42.360 回答