あなたは(AbstractMapのを使用して)地図の拡張機能を作成し、関連する機能を無効に検討する必要があります。一般に、拡張の構造には、以下のものが必要です。
- 通常のマップを使用したメモリ内のハード・キャッシュ。これはサイズ結合キャッシュオブジェクトでなければなりません。サイズは
this.objectMap = Collections.synchronizedMap(new LinkedHashMap() {
@Override
protected boolean removeEldestEntry(LinkedHashMap.Entry eldest) {
if (size() > HARD_CACHE_CAPACITY) {
// remove from cache, pass to secondary SoftReference cache or directly to the disk
}
}
});
を超えた場合は、キャッシュを超えた場合は、ディスク
- 上書き次の操作を行うための関数getにそれを置くチェックするremoveEldesEntryを()のLinkedHashMapを活用し、オーバーライドすることができます:最初のgetでは、特定の命名規則(キーに関連する)に基づいてディスクからビットマップをロードし、メモリに格納します。大雑把
@Override
public Bitmap get(Object key) {
if(key != null) {
// first level, hard cache
if(objectMap.containsKey(key)) {
return objectMap.get(key);
}
// soft reference cache
if(secondaryCache.containsKey(key)) {
return secondaryCache.get(key);
}
// get from disk if it is not in hard or soft cache
String fileName = "Disk-" + key + ".txt";
File f = new File(cacheDir, fileName);
if(f.exists()) {
// put this back to the hard cache
Bitmap object = readFromReader(f);
if(object != null) {
objectMap.put((String)key, object);
return object;
}
}
}
return null; // unable to get from any data source
}
(任意の構文エラーを許してください)のようなものは、同様にあなたのプットは、後で使用するために、ディスクに入れてオーバーライドすることがあるので、アプリを再初期化するとき、あなただけのマップのインスタンスを作成することができます拡張。必要に応じて、アプリで最も最近使用されたアイテムでハッシュマップをプリロードすることもできます。基本的には、AbstractMapを拡張することで、1000ビットマップでメモリを消さずに柔軟性を得ることができます。これが役立つことを願って
は同じuqestionsに興味があります.. – cV2