メモリ上にある種のキャッシュを構築したい場合は、SoftReferences で Map を使用することを検討してください。SoftReferences は、データをしばらく保持する傾向がある一種の参照ですが、ガベージ コレクションを防ぐことはできません。
携帯電話のメモリは少ないため、すべてをメモリに保持するのは現実的ではありません。その場合、デバイスのセカンダリ ストレージにキャッシュを保存することをお勧めします。
Google の Collectionsから MapMaker をチェックしてください。これにより、2 レベルのキャッシュを便利に構築できます。これを行うことを検討してください:
/** Function that attempts to load data from a slower medium */
Function<String, String> loadFunction = new Function<String, String>() {
@Override
public String apply(String key) {
// maybe check out from a slower cache, say hard disk
// if not available, retrieve from the internet
return result;
}
};
/** Thread-safe memory cache. If multiple threads are querying
* data for one SAME key, only one of them will do further work.
* The other threads will wait. */
Map<String, String> memCache = new MapMaker()
.concurrentLevel(4)
.softValues()
.makeComputingMap(loadFunction);
デバイスのセカンダリ ストレージのキャッシュについては、Context.getCacheDir()を確認してください。あなたが私のようにずさんな場合は、そこにすべてを残して、システムがより多くのスペースが必要になったときにシステムがあなたのために物事をきれいにしてくれることを願っています:P