我对NSURLBackgroundSession的理解:
我知道在后台会话中,即使用户将应用程序置于后台,我也可以启动上传或下载任务,并确保完成执行。当我使用后台会话创建上传或下载任务时,我知道一个单独的过程负责上传/下载任务。
但是后台会话的问题是,它不适用于数据任务。这在逻辑上是有道理的,因为数据任务的目的很短。最重要的是,即使上传任务与后台会话一起工作,但它只能在数据源是文件时才能工作。使用NSData / Data作为其数据源上传任务也无法正常工作。
我的问题:
记住所有这些事情,这是我的情景:
我正在使用后台获取模式作为我的应用中的后台模式功能之一。当我获得后台获取触发器时,我尝试从Health工具包中读取数据(假设可以访问Health工具包并且用户的设备未被锁定)。一旦我从Health Kit收集数据,我需要以特定格式将其发送到服务器。
现在是痛苦,触发时的背景提取给应用程序处理提供了非常有限的时间(有些网站说30秒,我不依赖它们),从健康工具包中读取数据会消耗大部分时间分配的块因此,当我进行Web服务调用或等待Web响应时,应用程序暂停,我几乎不会收到服务器响应。
以下是我尝试的解决方案:
1。我知道使用后台过期处理程序会在后台给我一个额外的处理时间。我在后台获取触发器时立即注册后台过期处理程序,现在工作正常。
我的问题:
我认为它们都有缺点。
方法1的问题: 虽然到期处理程序为我提供了额外的处理时间,但如果我的网络通话需要更长时间,该怎么办?它现在正在工作,因为传输的数据很小,网络足够快,因此网络调用在到期处理程序到期之前完成。我不认为它是一个可靠的模型。
方法2的问题: 创建上传任务只是为了确保数据通过并到达服务器,听起来不是一个好的解决方案。此外,编写本地文件并使用数据进行更新然后要求服务器人员从文件中读取而不是简单的JSON只是为了克服iOS平台的缺点,也没有多大意义。
请建议即使用户将应用程序置于后台,确保数据任务完成执行的正确方法是什么。