Android: как оптимизировать ListView с помощью ImageView + 3 TextViews?
Я искал повсюду, чтобы увидеть, есть ли стандартный способ достижения этого, но я каждый раз нахожу другое решение.
В основном я пытаюсь построить Custom ListView
с изображением и двумя-тремя строками текста помимо него.
Я понимаю, что для его оптимизации необходимо использовать следующее:
convertView
: В основном, если вид уже раздут, используйте егоLazy-Loading
: Не загружайте содержимое строк, пока они не будут вызваныФон
Downloading & Caching
: Загружать изображения в свои собственные потоки, а затем обновлять строку (и возможно ли их кешировать?)
Я мог справиться с 1 и 2, но третий действительно смущает меня.
Есть ли лучшая практика для этого?
Спасибо
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});
Обратите внимание, что это не рабочий код. Это было взято из большой базы кода, поэтому вам придется внести соответствующие изменения, чтобы эта работа работала.
Может быть немного рано описывать что-то как "лучшую практику". AsyncTask
или поток мониторинга LinkedBlockingQueue
Есть прекрасные способы разгрузить что-то вроде извлечения изображения.
Вы можете быть заинтересованы в моем ThumbnailAdapter
, который обрабатывает фоновую загрузку и кеширование для вас.