Android: как оптимизировать ListView с помощью ImageView + 3 TextViews? - PullRequest
1 голос
/ 05 октября 2009

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

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

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

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

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

  3. Фон Downloading & Caching: загружать изображения в собственные потоки, а затем обновлять строку (и возможно ли их кэшировать?)

Я мог бы справиться с 1 и 2, но третий действительно сбивает меня с толку.

Есть ли лучшая практика для этого?

Спасибо

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

Спасибо Марку за помощь. Это один из способов сделать то, что он предложил (на случай, если кому-то еще интересно):

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});

Обратите внимание, что это не рабочий код. Это было взято из большей базы кода, поэтому вам придется внести соответствующие изменения, чтобы эта работа работала.

0 голосов
/ 05 октября 2009

Может быть, немного рано описывать что-то как «лучшую практику». AsyncTask или поток, отслеживающий LinkedBlockingQueue, - это прекрасный способ разгрузить что-то вроде извлечения изображения.

Вас может заинтересовать мой ThumbnailAdapter, который обрабатывает фоновую загрузку и кэширование для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...