NSURLSessions 后台会话的正确用例是啥?
Posted
技术标签:
【中文标题】NSURLSessions 后台会话的正确用例是啥?【英文标题】:What is the proper use case for NSURLSessions background sessions?NSURLSessions 后台会话的正确用例是什么? 【发布时间】:2017-07-20 15:48:46 【问题描述】:在this 的答案中,我正在讨论 backgroundTasks 最终导致:
将 backgroundTasks 用于与下载/上传无关的任何事情。对于上传/下载,使用 NSURLSessions 的 backgroundSessions。然后我发表了另一条评论,询问为什么不对所有类型的请求使用后台会话并被告知:
对于常规的 REST 调用,后台会话不太方便, 通常不是你想要的。它们不是通用工具 对于每个请求;它们用于执行上传和下载。
是什么让后台会话对 REST 调用不太方便?有时,您的互联网速度可能会很慢,并且有大量数据。确保您所有的数据提交都通过不是很方便吗?
【问题讨论】:
【参考方案1】:我不确定,但如果您正在做诸如银行交易之类的事情,您不会想要使用 backgroundSession。因为您希望用户在离开之前知道该决定。用户永远不应该假设他们可以离开应用程序并且应用程序会继续正常工作。他们也不应该认为他们可以恢复(通过 downloadTaskWithUrl)。
如果用户出于某种原因进行了 2000 美元的交易并点击按钮期望交易会通过但它没有会发生什么。下次用户返回屏幕时,他们可能由于安全原因而退出并且永远不知道它,或者保持登录状态,但他们会看到交易失败的警报。现在他们就像“哦,不,我女儿急需 2000 美元。她一定还在等钱!”。
您不想让用户产生不好的期望*。相反,您希望用户自己承担全部责任,而不是点击主屏幕并等待成功/失败。因此,一旦用户单击提交转移,他将等待它获得成功并继续前进,或者看到失败并等待并调查他的交易未通过的原因。
您通常通过微调器/动画传达失败的可能性,并通过警报传达实际结果(失败或成功)。
*不好的预期是:每次我点击提交传输按钮都会通过,失败的可能性为0,无需您等待并看到它通过。
【讨论】:
问题是我们何时应该使用beginBackgroundTaskWithExpirationHandler
与后台会话,并且您将后台工作(适用于问题中的两个选项)与“强制用户等到结束并到达对于非常具体的案例,最终确定成功或失败”
我试图传达的是,如果对于您的应用程序最好强制用户等待,那么最好不要使用后台会话。那是错的吗?如果你能写一个答案,我也很高兴,因为没有人回答,我只是写了我自己的最佳答案¯_(ツ)_/¯
您所说的是正确的,但是当问题涉及在两个非强制等待背景解决方案之间进行选择时,这无关紧要。当我完成这方面的研究并进行了几次实验后,我可能会写一个答案以上是关于NSURLSessions 后台会话的正确用例是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 中 process.nextTick 的正确用例是啥?
OSGI 包中 Bundle-Classpath 的预期用例是啥
cudaGraphicsGLRegisterImage中cudaGraphicsRegisterFlagsWriteDiscard的用例是啥?