小民的ImageLoader 0.2版本 - 单一职责原则


06/09/17 12:03:52 D:\Users\kino.yan\Desktop\Android\temp\ImageLoader2.java
  1 
/**
  2 
  * 图片加载类
  3 
*/
  4 
public class ImageLoader {
  5 
    // 图片缓存
  6 
    ImageCache mImageCache = new ImageCache () ; // ImageCache 是自定义类
  7 
    // 线程池,线程数量为 CPU 的数量
  8 
    ExecutorService mExecutorService = Executors . newFixedThreadPool( RunTime . getRuntime() . availableProcessors()) ;
  9 
   
 10 
    // 加载图片
 11 
    public void displayImage ( final String url , final ImageView imageView ) {
 12 
        // 优先使用缓存
 13 
        Bitmap bitmap = mImageCache . get(url) ;
 14 
        if (bitmap != null ){
 15 
            imageView . setImageBitmap(bitmap) ;
 16 
            return ;
 17 
        }
 18 
        imageView . setTag(url) ;
 19 
        // 使用线程池
 20 
        mExecutorService . submit(
 21 
            new Runnable () {
 22 
                @Override
 23 
                public void run () {
 24 
                    Bitmap bitmap = downloadImage(url) ;
 25 
                    if (bitmap == null )
 26 
                        return ;
 27 
                    if (imageView . getTag() . equals(url))
 28 
                        imageView . setImageBitmap(bitmap) ;
 29 
                    // 存入缓存
 30 
                    mImageCache . put(url, bitmap) ;
 31 
                }
 32 
            }
 33 
        ) ;
 34 
    }
 35 
   
 36 
    /**
 37 
     * 下载图片,在加载图片方法中调用
 38 
     */
 39 
    public Bitmap downloadImage ( String imageUrl ) {
 40 
        Bitmap bitmap = null ;
 41 
        try {
 42 
            URL url = new URL (imageUrl) ;
 43 
            final HttpURLConnection conn = ( HttpURLConnection )url . openConnection() ;
 44 
            bitmap = BitmapFactory . decodeStream(conn . getInputStream()) ;
 45 
            conn . disconnect() ;
 46 
        } catch ( Exception e){
 47 
            e . printStackTrace() ;
 48 
        }
 49 
        return bitmap ;
 50 
    }
 51 
}

你可能感兴趣的:(Android)