無限リスト ビューに Web サービスからのデータを入力しています。データは、アプリからの POST リクエストへの応答として取得されます。ユーザーがリストを上下にスクロールするたびにネットワーク呼び出しが行われないように、そのようなデータをキャッシュするベスト プラクティスは何ですか? ありがとうございました!
3 に答える
過去にこれを行うために、キャッシュ スキームをネットワーク リクエスト レイヤーに追加して、API 呼び出し元に対してキャッシュを透過的にしました。キャッシュは x 分ごとに期限切れになります。SharedPreferences
キャッシュは、アプリの再起動時に使用できるように永続化されます。たとえば、API 呼び出しは次のようになります。
List<Item> items = server.getListItems(int page);
getListItems() 内でキャッシュをチェックして、有効なキャッシュがあるかどうかを確認します。そうであれば、キャッシュ内のアイテムを返します。それ以外の場合は、ネットワーク呼び出しを行います。
実際には、API は期限切れのキャッシュをすぐに返し、ネットワーク呼び出しを実行して新しい結果が返されたときに更新することをサポートしていたため、もう少し複雑でした。
server.getListItems(int page, new ResultListener<List<Item>>() {
public void onResult(List<Item> items) {
...
}
});
このスキームでは、キャッシュの有効期限が切れると、onResult() が 2 回呼び出されます。1 回目は期限切れのキャッシュで、もう 1 回は新しい結果で呼び出されます。
幸運を!
ピカソを試してみてください。正方形からの画像のダウンロードとキャッシュのためのもう 1 つの強力なライブラリ。キャッシュに関するすべてのことを行います。ただし、まだ LruCache を使用している場合は、アプリに特別な量のメモリを割り当てることを検討してください。そうしないと、アプリでメモリ ヒットが発生します。