我有一个自定义的ImageView子类,我用它来使用AsyncTask获取URL中的图像。但是,似乎无论我做什么,列表视图填充都会暂停,直到获取图像为止。
public void setImageURL(final String url) {
// do we have url in the cache?
Bitmap bitmap = mCache.getBitmap(url);
if(bitmap == null) {
new AsyncTask<Void, Void, Bitmap>() {
protected Bitmap doInBackground(Void... p) {
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.setUseCaches(true);
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch(IOException e) {
e.printStackTrace();
}
if(bm == null) {
return null;
}
return bm;
}
protected void onPostExecute(Bitmap bmp) {
if(bmp == null) {
return;
}
mCache.cacheBitmap(url, bmp);
setImageBitmap(bmp);
}
}.execute();
} else {
setImageBitmap(bitmap);
}
}
为什么异步任务会阻止与列表填充有关?
答案 0 :(得分:0)
您是否正在启动多个AsyncTasks?我会实现它只使用1个加载所有图像的AsyncTask。将花费大量时间为每个图像分配和启动新的线程。
http://developer.android.com/training/displaying-bitmaps/process-bitmap.html会帮助您入门。但是请务必考虑ListView在滚动时重用视图的方式。您并不总是有一个简单的1视图到1位图对。