我在后台运行时开始使用Siesta,使用Apple的后台获取功能。以这种方式运行时(许多)难以处理的事情之一是,在某些设备上,操作系统往往会经常杀死我的进程。我试图让我的处理尽可能快,并尽可能节省电池,以便操作系统选择定期运行它。
据我了解,如果Siesta的内存缓存中没有数据(如果是新推出的应用程序就是这种情况),那么它会同时发出网络请求和持久缓存请求。在这种情况下,我经常在持久缓存中拥有非常好的非陈旧数据。在发出网络请求之前,我可以让Siesta将数据预先加载到内存缓存中吗?然后我的代码使用更少的电池,它会定期运行,每件事都很棒!
答案 0 :(得分:0)
碰巧,我只是在为Siesta预先打包FileCache
实施工作时遇到了这个问题。我认为将其称为错误是公平的。
当您第一次将资源带入内存时,Siesta会异步触发缓存检查。这应该是 - 我们不希望昂贵的数据加载来阻止UI线程 - 但loadIfNeeded()
不等待缓存检查完成。
如果还没有数据,改进的设计会loadIfNeeded()
仍然返回Request
,但是请求是链接的,首先检查缓存并然后检查网络。
与此同时,(非常难看)解决方法是推迟loadIfNeeded()
来电:
let resource = service.resource("whatever")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
resource.loadIfNeeded()
}
更新:我已为此提交了an issue。