public class ImgLoader {  
      
    private Context context;  
    final  Map<String, SoftReference<Bitmap>> imgCache=  
            new HashMap<String, SoftReference<Bitmap>>();  
                          
    public ImgLoader(Context context) {  
        super();  
        this.context = context;  
    }  
      
    private Handler mhandler=new Handler();  
    private PicManager pm=new PicManager(context, imgCache);  
    private FileUtils fuUtils=new FileUtils();  
    private ExecutorService threadPool=Executors.newFixedThreadPool(5);  
    private DownLoad dl=new DownLoad();  
      
    public Bitmap loadImg(final String url,final ImgCallBack callBack)  
    {  
        Bitmap bitmap=null;  
        try {  
              
            bitmap=pm.getFromCache(url);  
            System.out.println("ImgLoader--->执行???  ");  
            if(bitmap==null)  
            {  
                System.out.println("ImgLoader--->什么时候执行");  
                threadPool.submit(new Runnable() {  
                      
                    @Override 
                    public void run() {  
                        // TODO Auto-generated method stub  
                        String fname=fuUtils.getFName(url);  
                          
                        dl.download(url,"picture/", fname);  
                        final Bitmap bit=BitmapFactory.decodeStream(dl.getInput(url));  
                        //imgCache.put(url,new SoftReference<Bitmap>(bit));  
                        mhandler.post(new Runnable() {  
                              
                            @Override 
                            public void run() {  
                                // TODO Auto-generated method stub  
                                  
                                callBack.refresh(bit);  
                            }  
                        });  
                    }  
                      
                      
                });  
            }  
        } catch (Exception e) {  
            // TODO: handle exception  
        }  
          
        return bitmap;  
    }  
      
}   1.线程池的理解:是不是创建线程池以后,就不用在创建线程了,可以直接拿线程池来用,并且可以指定线程池的数量,方便下载更多的图片。 理解有没有问题 求指点?
2.如果我要下载100张图片  调用100次这个方法。会是怎么的结果?是不是每5张5张的下载(5个线程池是不是意味着开启5条线程在下载这100张图片)? 就解释?
最近在做远程下载图片,想引用线程池这个概念。。 有谁有叫深理解,最好是直白,举例说明下!!!小弟不甚感激!!!!望大神拿出奉献精神!!!!!
线程池android

解决方案 »

  1.   

    1,线程创建好就一直在那里,等待任务,CPU,来了就执行,节省了创建,销灰线程的时间
    2,下100张,就会排一个100张的队列,只有前面的下载完了好后的才能开始奥,是5张5张的下,但肯定不能这样啊,100张一张100K,也有10M了,手机不能这样下,不然就只能等了
      

  2.   

     mhandler.post(new Runnable() {  
                                  
                                @Override 
                                public void run() {  
                                    // TODO Auto-generated method stub  
                                      
                                    callBack.refresh(bit);  
                                }  
    你在子线程做下面这个怎么感觉那么别扭呢?可能不会刷新UI,post是在ui线程去调的。