我一直在寻找各地,看看是否有一种标准的方法来实现这一目标,但我每次都会找到不同的解决方案。
基本上,我正在尝试使用图像和除此之外的两三行文本构建Custom ListView
。
为了优化它,我了解必须使用以下内容:
convertView
:基本上如果视图已经膨胀,请使用它
Lazy-Loading
:在调用行之前不要加载行的内容
后台Downloading & Caching
:在自己的线程中下载图片,然后更新行(并可能缓存它们?)
我可以管理1和2,但第三个让我很困惑。
这是最好的做法吗?
由于
答案 0 :(得分:2)
感谢马克的帮助。这是做他建议的一种方式(以防万一其他人好奇):
private class DownloadImageTask extends AsyncTask<Object, Integer, Bitmap> {
private ImageView iv;
protected Bitmap doInBackground(Object... params) {
try {
iv = (ImageView) params[0];
URL aURL = new URL("http://URLTOIMAGE/img" + params[1] + ".png" );
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
return bm;
} catch (IOException e) {
return null;
}
}
protected void onPostExecute(Bitmap result) {
iv.setImageBitmap((Bitmap) result);
}
}
它将按如下方式使用:
new DownloadImageTask().execute(new Object[] {ImageViewHandle, position});
请注意,这不是一个有效的代码。这是从更大的代码库中获取的,因此您必须进行适当的更改才能使其工作。
答案 1 :(得分:0)
将某事描述为“最佳做法”可能有点早。 AsyncTask
或监视LinkedBlockingQueue
的线程是卸载图片获取等内容的好方法。
您可能对ThumbnailAdapter
感兴趣,我会为您处理后台下载和缓存。