【问题标题】:Application continue to perform network operation after entering to the background?应用程序进入后台后继续进行网络操作?
【发布时间】:2012-08-12 12:48:13
【问题描述】:

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

有什么办法解决吗?

【问题讨论】:

    标签: iphone ios xcode nsurlconnection uiapplicationdelegate


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。连接很短,在 application:didEnterBackground 的 5 秒限制之前结束。我可以在调试文件中看到调用了 didEnterBackground,然后在几毫秒后结束了连接(调用了 didFinishLoading)
    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 2012-11-14
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多