【问题标题】:How to run a NSURLSession in ios in background mode如何在后台模式下在 ios 中运行 NSURLSession
【发布时间】:2015-10-01 10:51:26
【问题描述】:

我试图为分块响应打开一个 URL 会话,我可以通过在 NSURLSessionConfiguration 对象中设置 backgroundSessionConfigurationWithIdentifier 来实现这一点。如果应用程序进入后台,URL 会话仍然运行,但是一旦我通过从多任务视图换出退出应用程序,会话就会终止。有没有办法限制退出应用程序,直到调用 didFinishDownloadingToURL 委托。

我已经在我的 android 应用程序中使用本机线程实现了类似的功能(提升线程驻留在 UI 通过 JNI 调用的 .so 中),如果 UI 从多任务视图中换出,它不会终止。有没有办法在 IOS 应用中实现相同的功能?

问候, 比金杜

【问题讨论】:

    标签: ios objective-c background nsurlsession


    【解决方案1】:

    根据NSURLSession guide 后台会话任务在不同的进程(不是线程)中执行。即使启动器应用程序被杀死,也完成了。您可以在重新启动应用程序时重新分配给 bg 任务。

    在 iOS 和 OS X 中,当用户重新启动您的应用程序时,您的应用程序应立即创建具有与上次运行您的应用程序时具有未完成任务的任何会话相同的标识符的后台配置对象,然后为每个会话创建一个会话那些配置对象。这些新会话同样会自动与正在进行的后台活动重新关联。

    如果您的应用在 bg 会话期间终止并且会话在您重新启动应用之前完成,则不确定是否可以获得任务结果。

    【讨论】:

    • 感谢回复,如果应用终止,NSURLSession 完成下载任务。但我的要求远不止于此。下载完成后我需要发布本地通知,以防用户退出应用程序。
    • @Birajendu 您可以使用此 API 在转换到后台后延长应用程序的生命周期(但不会被多任务菜单中的滑动杀死):developer.apple.com/library/ios/documentation/UIKit/Reference/…:
    • 感谢您的建议,但这并不能解决我的目的。我的目的是打开与服务器的始终开启的 http 连接并不断获取分块数据,每次收到数据时我都想触发本地通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多