我使用Apple的背景获取功能在后台运行时开始使用Siesta。在这种方式运行时,(许多)困难的事情之一是,在某些设备上,操作系统往往会经常杀死我的过程。我正在尝试使我的处理能够快速和电池效率,以便操作系统会选择定期运行它。
我理解,如果Siesta在其内存缓存中没有数据(如果应用程序新启动是这种情况),则它同时提出网络请求和持续的缓存请求。在这种情况下,我经常在持久性缓存中具有完全不错的,不固定的数据。在提出网络请求之前,我可以让Siesta将数据预先加载到内存缓存中吗?然后我的代码使用较少的电池,它会定期运行,每件事都很棒!
发生时,我自己只是在塞斯塔(Siesta)的预包装的FileCache
实现中遇到了这个问题。我认为称其为错误是公平的。
首先将资源带入内存时,塞斯塔(Siesta)会不同步地发射缓存检查。那就是应该的 - 我们不希望昂贵的数据加载来支撑UI线程 - 但是loadIfNeeded()
不等待缓存检查完成。
如果没有数据,则改进的设计仍然会使loadIfNeeded()
仍返回Request
,但要让该请求是首先检查缓存和然后检查网络的请求。。
与此同时,一个(非常丑陋的)解决方法是延迟您的loadIfNeeded()
调用:
let resource = service.resource("whatever")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
resource.loadIfNeeded()
}
更新:我已经为此提出了问题。