当前位置:编程学习 > wap >>

android 线程池的问题

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,线程创建好就一直在那里,等待任务,CPU,来了就执行,节省了创建,销灰线程的时间
2,下100张,就会排一个100张的队列,只有前面的下载完了好后的才能开始奥,是5张5张的下,但肯定不能这样啊,100张一张100K,也有10M了,手机不能这样下,不然就只能等了 --------------------编程问答-------------------- 楼上说得正确,其实你这两个问题是一个问题。
1,线程池就是一池子,要用就拿,不够就等的过程
2,下100张,就会排100个下载图片线程的队列,1-5在执行,如果其中一个终止,则第6个开始 --------------------编程问答--------------------  mhandler.post(new Runnable() {  
                              
                            @Override 
                            public void run() {  
                                // TODO Auto-generated method stub  
                                  
                                callBack.refresh(bit);  
                            }  
你在子线程做下面这个怎么感觉那么别扭呢?可能不会刷新UI,post是在ui线程去调的。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,