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
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
解决方案 »
- android如何让一个程序获得root权限(整机不root)
- 关于socket长连接
- bundle在Activity中的使用问题。。。求解!
- 一个应用应该有几个BroadCastReciever
- 请教:播放流媒体
- 在Eclipse中 System.out.println("DEBUG")没有打印出来?
- 大神,我又来了!!!httpclient的post方法无法获取响应消息的location字段,怎么破!!
- app 客户端本地数据隐藏
- 如何显示被创维电视启动器屏蔽掉的爱奇艺图标
- textview对单词设置点击事件,内容过多时卡顿
- android拖动videoview进行视频交换的问题
- 怎么使用GIT下载ANDROID源码
2,下100张,就会排一个100张的队列,只有前面的下载完了好后的才能开始奥,是5张5张的下,但肯定不能这样啊,100张一张100K,也有10M了,手机不能这样下,不然就只能等了
@Override
public void run() {
// TODO Auto-generated method stub
callBack.refresh(bit);
}
你在子线程做下面这个怎么感觉那么别扭呢?可能不会刷新UI,post是在ui线程去调的。