Android: как оптимизировать ListView с помощью ImageView + 3 TextViews?

Я искал повсюду, чтобы увидеть, есть ли стандартный способ достижения этого, но я каждый раз нахожу другое решение.

В основном я пытаюсь построить Custom ListView с изображением и двумя-тремя строками текста помимо него.

Я понимаю, что для его оптимизации необходимо использовать следующее:

  1. convertView: В основном, если вид уже раздут, используйте его

  2. Lazy-Loading: Не загружайте содержимое строк, пока они не будут вызваны

  3. Фон 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, который обрабатывает фоновую загрузку и кеширование для вас.

Другие вопросы по тегам