菜鸟教程小白 发表于 2022-12-13 06:23:19

ios - 当设备进入休眠模式时,临时部署中的后台 NSURLSession 问题


                                            <p><p>我必须下载一长串文件,因此所有这些操作可能需要很长时间。我决定使用后台配置实例化的 NSURLSession 来管理这些下载任务。
在我的 iPhone 上构建并运行代码后,我尝试测试应用程序,拔下设备并在没有 xCode 的情况下启动应用程序。在这种情况下,我注意到如果连接不是通过 WiFi,下载将不再开始。此外,我注意到,在下载操作期间,如果设备进入休眠模式,几秒钟(10-15 秒)后解锁它的应用程序将重新启动并停止下载。
我不知道这是否重要,但我希望这些问题在 iOS 8.2 中不存在(现在我使用的是 iOS 8.3)。</p>

<p>我的 session 配置如下</p>

<pre><code>NSString *sessionIdentifier = @&#34;com.yourappfor.example&#34;;
NSURLSessionConfiguration *sessionConfiguration;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@&#34;8.0&#34;)) {
    sessionConfiguration = ;
} else {
    sessionConfiguration = ;
}
;
;
;
;
;
;
;
NSURLSession *session = ;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>正如其他地方所讨论的(例如,参见 <a href="https://stackoverflow.com/a/25653066/1271826" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/25653066/1271826</a> ),当您使用 <code>discretionary</code> 时,它可能会在开始请求之前考虑 wifi 状态。正如 <code>discretionary</code> 文档所说:</p>

<blockquote>
<p>When transferring large amounts of data, you are encouraged to set the value of this property to <code>YES</code>. Doing so lets the system schedule those transfers at times that are more optimal for the device. For example, the system might delay transferring large files until the device is plugged in and connected to the network via Wi-Fi. The default value of this property is <code>NO</code>.</p>
</blockquote>

<p>我已经凭经验证实了这一点:</p>

<ul>
<li><p>我关掉了wifi,启动了一个<code>discretionary</code>后台 session ,插上我的设备,放了一夜,早上起来的时候,我的请求还没有被执行.只有当我打开 wifi 时,他们才会继续(而且似乎做得很快)。</p></li>
<li><p>第二天晚上我重复了这个练习,这次是关闭了 <code>discretionary</code>。这一次,请求被执行了,虽然不是立即执行。它们大约在 10 分钟后完成(顺便说一句,如果正常执行,它们可能会花费不到一分钟左右的时间,因此仅蜂窝网络的后台连接速度要慢得多)。</p></li>
</ul>

<p>底线,<code>discretionary</code> 将在执行请求时考虑 wifi 状态,但关闭 <code>discretionary</code> 后,请求将在没有 wifi 的后台 session 中执行,尽管速度不是很快。 </p>

<hr/>

<p>但应注意,这仅适用于您在应用程序处于前台时启动的任务。正如 <code>discretionary</code> 文档继续说的:</p>

<blockquote>
<p>The session object applies the value of this property only to transfers that your app starts while it is in the foreground. For transfers started while your app is in the background, the system always starts transfers at its discretion—in other words, the system assumes this property is <code>YES</code> and ignores any value you specified.</p>
</blockquote></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 当设备进入休眠模式时,临时部署中的后台 NSURLSession 问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29616196/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29616196/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 当设备进入休眠模式时,临时部署中的后台 NSURLSession 问题