2017-12-04 10 views
0

Appleのバックグラウンドフェッチ機能を使用してバックグラウンドで実行している間、私はSiestaを使い始めました。このように動作する中で(多くの)困難なことの1つは、一部のデバイスではOSが頻繁にプロセスを停止させる傾向があることです。私は自分の処理をできるだけ速く、バッテリーを効率的にするよう努力しているので、OSはそれを定期的に実行するように選択します。ネットワーク要求を行う前にシエスタに永続キャッシュを見させることはできますか?

私が理解しているように、Siestaがメモリ内キャッシュにデータを持たない場合(アプリケーションが新しく起動された場合)、ネットワーク要求と永続キャッシュ要求の両方を行います。このシナリオでは、永続キャッシュ内に完全に良好で、失効していないデータがあることがよくあります。シエスタに、ネットワーク要求を出す前に、そのデータをインメモリキャッシュにプリロードさせることはできますか?その後、私のコードはバッテリーを節約し、定期的に実行され、すべてが素晴らしいです!

答えて

0

シエスタ用に実装されたFileCacheの実装に取り​​組んでいます。私はそれをバグと呼ぶのが公正だと思う。

初めてリソースをメモリに読み込むと、シエスタはキャッシュチェックを非同期で起動します。これはそうすべきことです。高価なデータ読み込みがUIスレッドを保持することは望ましくありませんが、loadIfNeeded()はキャッシュチェックが完了するまで待たないでください。

改良されたデザインは、まだデータがありません場合loadIfNeeded()はまだRequestを返す必要がありますが、その要求はまずチェックネットワークをキャッシュしてをチェックチェーンいずれかである必要があります。

let resource = service.resource("whatever") 
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { 
    resource.loadIfNeeded() 
} 

更新:私はこのためan issueを提出してきた一方

、このため(非常に醜い)回避策は、あなたのloadIfNeeded()コールを遅延させることです。

関連する問題