Android Jamendo源码 图片缓存实现


Android Jamendo源码 图片缓存实现 :

  1. package com.teleca.jamendo.util;   
  2.   
  3. import java.util.WeakHashMap;   
  4.   
  5. import android.graphics.Bitmap;   
  6.   
  7. /**  
  8.  * Caches downloaded images, saves bandwidth and user's  
  9.  * packets  
  10.  *   
  11.  * @author Lukasz Wisniewski  
  12.  */  
  13. public class ImageCache extends WeakHashMap<String, Bitmap> {   
  14.   
  15.     //WeakHashMap....add by gjican...   
  16.     private static final long serialVersionUID = 1L;   
  17.        
  18.     public boolean isCached(String url){   
  19.         return containsKey(url) && get(url) != null;   
  20.     }   
  21.   
  22. }  

在JamendoApplicatin中定义一个全局的getImageCache()来获得当前应用程序图片缓存  JamendoApplication.getInstance().getImageCache().put(mTaskUrl, bmp);

然后在每次下载图片之前先进行判断,看是否缓存里存在此图片,若有则直接显示,否则调用DownloadTast()去下载

  1. public String doInBackground(String... params) {   
  2.   
  3.     mTaskUrl = params[0];   
  4.     InputStream stream = null;   
  5.     URL imageUrl;   
  6.     Bitmap bmp = null;   
  7.   
  8.     try {   
  9.         imageUrl = new URL(mTaskUrl);   
  10.         try {   
  11.             stream = imageUrl.openStream();   
  12.             bmp = BitmapFactory.decodeStream(stream);   
  13.             try {   
  14.                 if(bmp != null){   
  15.                     JamendoApplication.getInstance().getImageCache().put(mTaskUrl, bmp);   
  16.                     Log.d(JamendoApplication.TAG, "Image cached "+mTaskUrl);   
  17.                 } else {   
  18.                     Log.w(JamendoApplication.TAG, "Failed to cache "+mTaskUrl);   
  19.                 }   
  20.             } catch (NullPointerException e) {   
  21.                 Log.w(JamendoApplication.TAG, "Failed to cache "+mTaskUrl);   
  22.             }   
  23.         } catch (IOException e) {   
  24.             Log.w(JamendoApplication.TAG, "Couldn't load bitmap from url: " + mTaskUrl);   
  25.         } finally {   
  26.             try {   
  27.                 if(stream != null){   
  28.                     stream.close();   
  29.                 }   
  30.             } catch (IOException e) {}   
  31.         }   
  32.   
  33.     } catch (MalformedURLException e) {   
  34.         e.printStackTrace();   
  35.     }   
  36.     return mTaskUrl;   
  37. }  

相关内容