亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

ListView異步加載圖片實現思路

2020-04-11 12:29:59
字體:
來源:轉載
供稿:網友
在應用開發中,經常用到ListView去加載數據,加載圖片和文字是比較常見的,文字還好,圖片從網絡請求加載速度比較慢,所以需要把圖片的加載放到另一個線程中去執行,執行完了再更新UI線程。以下列出一個我在項目中使用到的異步加載圖片的解決方案,代碼沒有上全,給出核心部分。

大致思路是這樣
1.利用軟引用來緩存圖片Bitmap,用圖片的URL作為緩存查找的Key;
2.設兩級緩存,一級是SoftReference,二級是本地SD卡;
3.如果兩級緩存都沒取到圖片,則從服務器獲取,并加入緩存;
4.加載完后通過回調接口通知UI更新;

以下是異步加載的關鍵代碼,其中一些工具類沒有給出,自己實現就可以,比如HttpRequest是我自己寫的一個類。
復制代碼 代碼如下:

public class AsyncImageLoader {
//Cache for image(Type String is the URL of image,the second parameter is soft reference)
private HashMap<String, SoftReference<Bitmap>> imageCache = null;
private Activity context;
public AsyncImageLoader(Activity context){
this.context = context;
imageCache = new HashMap<String, SoftReference<Bitmap>>();
}
public Bitmap loadImage(final ImageView imageView,final String imageURL,final ImageCallBack imageCallBack){
//If the cache contains the reference of bitmap then return
if (imageCache.containsKey(imageURL)) {
SoftReference<Bitmap> bitmapReference = imageCache.get(imageURL);
Bitmap bitmap = bitmapReference.get();
if (bitmap != null) {
return bitmap;
}
}
//Second cache,search local SD card
else {
String fileName = StringUtil.namePicture(imageURL);//獲取文件名
boolean isExist = SystemUtils.findPhotoFromSDCard(Constant.INFO_PATH, fileName);
if (isExist) {//是否在SD卡存在圖片
Bitmap bitmap = SystemUtils.getPhotoFromSDCard(Constant.INFO_PATH, fileName);
return bitmap;
}
}
final Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg)
{
imageCallBack.setImage(imageView, (Bitmap)msg.obj);
}
};
//If the bitmap not exists in cache or SD card,then get it from net
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
boolean isNetwork = SystemUtils.checkNetwork(context);
if (isNetwork) {
InputStream photoStream = HttpRequest.getImageStream(imageURL);//這里是我自己寫的一個類,目的是通過URL地址從服務器獲取圖片輸入流
Bitmap bitmap;
try {
bitmap = ImageTools.getResizeBitmap(photoStream, 128, 128);
if (bitmap != null) {
String fileName = StringUtil.namePicture(imageURL);
//Save image to SD card
SystemUtils.savePhotoToSDCard(bitmap, fileName, Constant.INFO_PATH);
//Put soft reference to cache
imageCache.put(imageURL, new SoftReference<Bitmap>(bitmap));
//Send message to update UI
Message message = myHandler.obtainMessage(0, bitmap);
myHandler.sendMessage(message);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
return null;
}
/**
* Interface for load image
* @author Ryan
*
*/
public interface ImageCallBack{
//Set image for imageview through bitmap
public void setImage(ImageView imageView,Bitmap bitmap);
}
}

在ListView的adapter的getView方法中:
復制代碼 代碼如下:

Bitmap bitmap1 = asyncImageLoader.loadImage(viewHolder.imageView1, url1, new ImageCallBack() {
@Override
public void setImage(ImageView imageView, Bitmap bitmap) {
// TODO Auto-generated method stub
imageView.setImageBitmap(bitmap);
}
});
if (bitmap1 != null) {
viewHolder.imageView1.setImageBitmap(bitmap1);
}else {
viewHolder.imageView1.setImageResource(R.drawable.image_bg);
}

其中asyncImageLoader是在adapter的構造方法中初始化的,形成一個緩存。通過這個機制就可以實現ListView的圖片異步加載,在用戶體驗上比直接加載要感覺好很多,那樣會造成界面卡頓。這里是加載一張圖片的情況,如果ListView的item中的圖片是不定的,有可能是一張、兩張、三張,該用什么方式呢,大家可以思考一下,并可以一起討論一下,包括實現ListView滾動時不加載數據也是優化ListView加載的必要步驟。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大片第1页| 欧美日韩美女在线| 欧美孕妇孕交黑巨大网站| 精品久久久视频| 欧美诱惑福利视频| 国产不卡av在线免费观看| 亚洲娇小xxxx欧美娇小| 在线观看视频99| 日韩av在线一区二区| 2020久久国产精品| 日韩av不卡在线| 国产亚洲一区精品| 欧美激情视频一区二区| 亚洲天堂成人在线| 亚洲成人免费在线视频| 日韩中文字幕av| 91wwwcom在线观看| 日韩欧美国产成人| 国产精品精品视频一区二区三区| 最近2019好看的中文字幕免费| 91亚洲va在线va天堂va国| 亚洲精品成人网| 亚洲一级黄色av| 中文字幕av一区中文字幕天堂| 55夜色66夜色国产精品视频| 中文字幕日本精品| 成人中文字幕+乱码+中文字幕| 国产剧情久久久久久| 精品亚洲精品福利线在观看| 北条麻妃一区二区在线观看| 午夜精品福利视频| 日韩电视剧在线观看免费网站| 亚洲精品福利免费在线观看| 亚洲国产欧美一区二区丝袜黑人| 久色乳综合思思在线视频| 亚洲自拍偷拍视频| 亚洲一区二区免费在线| 亚洲视频999| 亚洲xxxxx性| 亚洲欧美日韩精品| 欧美高清视频一区二区| 啊v视频在线一区二区三区| 97精品一区二区视频在线观看| 国产精品一区二区三区毛片淫片| 亚洲成色777777在线观看影院| 91免费人成网站在线观看18| 国产精品91视频| 亚洲色图50p| 国产视频亚洲视频| 国产综合久久久久久| 亚洲最大福利视频网站| 亚洲色图国产精品| 4p变态网欧美系列| 国产精品久久久久久久久久久久久| 最新亚洲国产精品| 国产成人avxxxxx在线看| 亚洲精品国产成人| 高清一区二区三区四区五区| 久久午夜a级毛片| 日韩精品高清视频| 亚洲天堂av在线免费| 欧美电影在线免费观看网站| 欧美日韩国产精品一区二区三区四区| 国产成+人+综合+亚洲欧洲| 国产精品丝袜视频| 狠狠躁18三区二区一区| 国产精品久久久久999| 亚洲美女av在线播放| 欧美成人sm免费视频| 亚洲加勒比久久88色综合| 国产精品久久久久久久av大片| 欧美日韩国产999| 欧美视频精品一区| 精品久久久久久久久久ntr影视| 韩国v欧美v日本v亚洲| 国内精品中文字幕| 日韩视频在线免费| 永久免费毛片在线播放不卡| 日韩大片在线观看视频| 国产精品美乳在线观看| 91久久久国产精品| 日韩一区av在线| 国产精品视频最多的网站| 日韩av电影在线播放| 国产成人精品优优av| 国产精品嫩草影院一区二区| 日韩电影中文字幕一区| 欧美高清视频一区二区| 久久精品99久久久香蕉| 色综合天天狠天天透天天伊人| 国产精品一区二区久久精品| 久久久精品免费视频| 精品国产91久久久久久| 成人亚洲综合色就1024| 亚洲人av在线影院| 96精品久久久久中文字幕| 日韩av片电影专区| 亚洲欧美日韩国产中文专区| 九九久久久久99精品| 日本中文字幕成人| 欧美日韩国产精品一区| 久久精品久久久久电影| 日韩欧美亚洲综合| 午夜精品久久久久久久久久久久久| 日韩大胆人体377p| 日韩av观看网址| 在线日韩第一页| 成人www视频在线观看| 日韩av在线高清| 欧美性视频在线| 国产日韩在线观看av| 精品久久久久久久久久久久| 国产精品久久久久久久久男| 2019中文字幕在线免费观看| 九九久久久久99精品| 国产欧美精品日韩精品| 在线免费看av不卡| 精品国内自产拍在线观看| 亚洲国产精品va| 精品性高朝久久久久久久| 亚洲人成电影网| 国内精品国产三级国产在线专| 日韩在线视频观看正片免费网站| 亚洲乱码国产乱码精品精| 久久综合伊人77777| 欧美大成色www永久网站婷| 国产一区二区欧美日韩| 国产亚洲人成a一在线v站| 2019中文字幕在线| 成人天堂噜噜噜| 精品久久久久久久大神国产| 国产成人一区二区三区| 久久久久久久影视| 2019亚洲日韩新视频| 亚洲毛片一区二区| 欧美激情一二三| 亚洲综合国产精品| 欧美麻豆久久久久久中文| 亚洲激情视频在线播放| 中文在线资源观看视频网站免费不卡| 日韩av电影免费观看高清| 午夜精品免费视频| 91久久国产精品91久久性色| 92国产精品久久久久首页| 中文在线资源观看视频网站免费不卡| 亚洲一区美女视频在线观看免费| 亚洲成人激情在线观看| 欧美高清videos高潮hd| 欧美激情综合色综合啪啪五月| 国产日韩一区在线| 福利二区91精品bt7086| 国产成人+综合亚洲+天堂| 日韩经典中文字幕| 欧美影院久久久| 懂色av中文一区二区三区天美| 在线日韩av观看| 国产精品18久久久久久麻辣| 国产精品视频免费观看www| 亚洲精品久久久久久久久久久久久| 欧美激情视频在线免费观看 欧美视频免费一| 久久成人在线视频| 欧美性20hd另类| 国产精品一香蕉国产线看观看| 日韩欧美极品在线观看|