решение относительно медленного процесса из AsyncTask при загрузке большого количества изображений с SDCard - PullRequest
1 голос
/ 07 октября 2011

Добрый день всем, у меня есть куча изображений, которые я хочу отобразить с SDCard в сетку.Я следовал руководству, чтобы сделать это по ссылке:

http://mihaifonoage.blogspot.com/2009/11/displaying-images-from-sd-card-in.html

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

Теперь я также использовал заполненные изображения в пользовательском ListView без использования AsyncTask, и кажется, что он обрабатывается быстрее.да, здравый смысл будет состоять в том, чтобы просто использовать более быстрый метод, но сначала нужно кое-что прояснить.поэтому я спрашиваю:

  1. это то, что AsyncTask может быть очень медленным в некоторых случаях и не идеальным или, таким образом, тот факт, что я использую Gridview или Listview, как-то связан с этим?какая причина почему?Я прошу эту причину AsyncTask всегда, кажется, получает очень хороший фаворизм.

  2. Любой другой способ, решения или советы, которые я могу сделать этот процесс быстрее? ..

Примечание: я бы опубликовал свой код, но он такой же, как и ссылка, только то, что я не использую getThumbnails () в запросе MediaStore.Заранее спасибо.

Вот часть, которую я получаю для вывода logcat при загрузке изображений:

10-07 19:42:54.072: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2886K/5511K, external 1574K/14018K, paused 28ms

10-07 19:42:54.092: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 1574K/14018K, paused 25ms

10-07 19:42:54.122: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 1574K/14018K, paused 25ms

10-07 19:42:54.142: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 1574K/14018K, paused 24ms

10-07 19:42:54.172: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 1574K/14018K, paused 25ms

10-07 19:42:54.202: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 1574K/14018K, paused 25ms

10-07 19:42:54.232: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 14018K/14018K, paused 28ms

10-07 19:42:54.252: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 14018K/14018K, paused 24ms

10-07 19:42:54.282: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 14018K/14018K, paused 24ms

10-07 19:42:54.302: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 14018K/14018K, paused 25ms

10-07 19:42:54.332: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 14018K/14018K, paused 25ms

10-07 19:42:54.362: DEBUG/dalvikvm(20291): GC_EXPLICIT freed <1K, 48% free 2918K/5511K, external 14018K/14018K, paused 25ms

Ответы [ 2 ]

0 голосов
/ 27 сентября 2012

Правильный способ ускорить это - использовать кэш изображений. У Google есть руководство по легкой реализации права здесь :

0 голосов
/ 14 октября 2011

Это медленно, потому что на самом деле вы все еще используете один единственный поток (то есть один вызов AsyncTask.execute ()) для загрузки всех изображений в последовательности (то есть зацикливание загрузки всех изображений в вашей реализации doInBackground ()).Да, именно так Google предложил использовать AsyncTask.

Вызов нескольких AsyncTask.execute (), вероятно, ускорит вас, это даст вам несколько потоков, работающих одновременно и управляемых базовым пулом потоков (до API).уровень 11, этот пул потоков недоступен).Конечно, вам нужно как-то разделить вашу задачу загрузки на несколько частей и передать каждую часть в каждый AsyncTask.execute ():

for (DownloadTask task : tasks) {
  new AsyncTask.execute();
}

Проверьте здесь для получения дополнительной информации.

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