2011-11-11 4 views
2

Guavaで文字列キーをソフトキーにする必要がありますか?グアバでソフトキーにするには文字列キーを作ってください。

私はそれを単純なビットマップキャッシュに使用しています。

private final ConcurrentMap<String, Bitmap> imageCache = new MapMaker() 
     .softValues() 
     .expireAfterAccess(IMAGE_EXPIRATION_TIMEOUT, TimeUnit.SECONDS) 
     .makeComputingMap(new Function<String, Bitmap>() { 
      public Bitmap apply(String key) { 

       Log.d(TAG, "Image loaded"); 

       Bitmap bm = null; 
       try { 
        URL aURL = new URL(key); 
        URLConnection conn = aURL.openConnection(); 
        conn.connect(); 
        InputStream is = conn.getInputStream(); 
        BufferedInputStream bis = new BufferedInputStream(is); 
        bm = BitmapFactory.decodeStream(bis); 
        bis.close(); 
        is.close(); 
       } catch (Exception e) { 
        Log.w(TAG, e); 
       } 

       return bm; 
      } 
     }); 

答えて

4

いいえ、ソフトキーは使用しないでください。最新のリリースでは廃止予定です。理由の詳細については、this answerを参照してください。

でコンピューティングマップを作成するよりも、最新のリリースではCacheCacheBuilderを使用することをお勧めします。

+0

私はCacheBuilderについて知っています。しかし、GoogleのHTTPクライアントはまだr9に依存しています。 –

+0

私のイメージキャッシュにWeakKeyを使用するのですか? –

+0

@AlexeyZakharov:いいえ、あなたは弱いキーを必要としません。 'String'キーでは、' == '等値ではなく' .equals'等号を使ってキーを比較したいので、2つの異なる 'String'オブジェクトが等しいとみなされます。 r9に依存するgoogleのHTTPクライアントまでは...私は '@ Beta' APIを使用しないと想像していますので、r9を10.0.1に安全に置き換えることができます。 – ColinD

関連する問題