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