2011-05-16 26 views
3

こんにちは私は、次回のアプリケーション起動時に使用するAndroidデバイスに格納する必要があるビットマップのHasmapを持っています。Android HashMapシリアル化/逆シリアル化

私のハッシュマップは次のようになり、1000ビットマップまで含まれています

private static HashMap <String, Bitmap> cache = new HashMap<String, Bitmap>(); 
+0

は同じuqestionsに興味があります.. – cV2

答えて

0

あなたは(AbstractMapのを使用して)地図の拡張機能を作成し、関連する機能を無効に検討する必要があります。一般に、拡張の構造には、以下のものが必要です。

  1. 通常のマップを使用したメモリ内のハード・キャッシュ。これはサイズ結合キャッシュオブジェクトでなければなりません。サイズは

    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 
      } 
     } 
    }); 
  1. を超えた場合は、キャッシュを超えた場合は、ディスク
  2. 上書き次の操作を行うための関数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ビットマップでメモリを消さずに柔軟性を得ることができます。これが役立つことを願って

関連する問題