getView顺序加载显示图片



在getView中加载缩略图,按照顺序一张一张的显示


前提:使用的是HTTP请求,访问的是一个DVR中的文件(图片),这里的DVR猜测不支持并发,不是访问HTTP的服务器。


过程:
1、使用之前的图片加载工具ImageLoader


   出现问题:仅能加载出第一张图片后面的图片均为默认图片方式显示。
   ——————————————————————————————————————————————————————————————————————


2、在getView中开启子线程去访问远端获取数据:
new Thread(){// OK
public void run(){
try{
Thread.sleep((position + 1) * 1000);
//Thread.sleep(1000);


IMGView imgViewInstance = new IMGView();
imgViewInstance.mUrl = pictureUrl;
imgViewInstance.imageBtn = imageBtn;


Message msg = mHandler1.obtainMessage();
msg.obj = imgViewInstance;
mHandler1.sendMessage(msg);
//imageLoader.getIMGOfThumb(pictureUrl, imageBtn);


} catch (InterruptedException e){


}
}
}.start();

其中的mHandler1:
public Handler mHandler1 = new Handler(){
@Override
public void handleMessage(Message msg) {
Message message = msg;
IMGView imgBeanHolder = (IMGView) message.obj;
ImageView imageBtn = imgBeanHolder.imageBtn;
String pictureUrl = imgBeanHolder.mUrl;
imageLoader.getIMGOfThumb(pictureUrl, imageBtn);
//imageLoader.loadImage(pictureUrl, imageBtn, true);




super.handleMessage(msg);
}
};

 方法getIMGOfThumb()做同步处理:
public synchronized void getIMGOfThumb( String picUrl, final ImageView imageBtn) {//synchronized

}

通过getView的参数position,使用延时处理,完成,存在的问题,当数据量很大的时候,用户向下滑动,要等待很久图片才会被加载显示出来。可取,需优化。
————————————————————————————————————————————————————————————————

3、使用线程池,带有顺序执行的
在getView中执行
executorService.execute(new ObtainPictureFromDevice(imageLoader,
imgViewInstance));

全局变量
private ExecutorService executorService = Executors.newSingleThreadExecutor();

private class ObtainPictureFromDevice implements Runnable{


private ImageLoader imageLoader = null;
private IMGView imgBeanHolder = null;


public ObtainPictureFromDevice(ImageLoader imageLoader, IMGView imgBeanHolder){
this.imageLoader = imageLoader;
this.imgBeanHolder = imgBeanHolder;
}
@Override
public void run() {
ImageView imageBtn = imgBeanHolder.imageBtn;
String pictureUrl = imgBeanHolder.mUrl;
imageLoader.getIMGOfThumb(pictureUrl, imageBtn);// 同步的是imageloader的对象
}
}
结果验证:不可取
—————————————————————————————————————————————————————————————————
4、依旧在getView中开启线程访问,通过广播方式,知晓当前ListView的显示条目的位置,随后再做图片的加载显示。
    new Thread(new Runnable() {
@Override
public void run() {
String url = "http://"+Application.DVR_IP +"/thumb/Photo/" + fileName_short;
netImage.getImageSyn(url, context, map.mName, item.thumbBtn, false);
}
}).start();
*************************************
public synchronized void getImageSyn( String picUrl, final Context context,
 final String keyName, final ImageView imageBtn, final boolean isSave) {
 ……
 
InputStream inputStream = urlConnection.getInputStream() ;
try {
Bitmap bmp = BitmapFactory.decodeStream(inputStream);
if(bmp!=null) {
//imageBtn.setImageBitmap(bmp);
ThumbnailCache.getInstance().addThumbToCache(keyName, bmp);
UtilAssist.Util_SendBroadCast(MessageName.BROADCAST_DVR_Thumb,keyName);
}
} finally {
inputStream.close() ;
}
}
************************************************
最后接收广播计算显示的图片位置,此处代码略。

   验证可取。
   _____________________________________________________________________________



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值