Загрузка пользовательского интерфейса Android без блокировки - PullRequest
0 голосов
/ 04 января 2012

Я создаю программу для чтения новостей для Android, где первая активность покажет список последних новостей в сочетании с миниатюрой предварительного просмотра. Чтобы получить миниатюру, мне нужно запустить метод, который сильно увеличивает время загрузки; поэтому я думал создать отдельный поток для запуска каждый раз. Точнее, я хотел бы сначала загрузить заголовки новостей, а затем загрузить картинки, одну за другой; делая все это, я не хочу, чтобы пользовательский интерфейс был заблокирован (например, если пользователь касается новости, я хочу, чтобы приложение загрузило его, даже если некоторые эскизы все еще загружаются). Мой вопрос: должен ли я использовать обработчики (один поток для каждой новости) или AsyncTask (один объект asyncTask для каждой новости), чтобы достичь этого?
Спасибо за ваши ответы.

Ответы [ 3 ]

0 голосов
/ 04 января 2012

Нет сомнений, что AsyncTasks более просты и модульны, чем архитектура-обработчик потоков, но внутренне они выполняют действие таким же образом.
В связи с вашей проблемой, я бы предложил сначала загрузить новости.
Ваш news pojo / class может быть похож на два поля:
title и imageUrl.

Теперь отобразите список новостей и запустите другой AsyncTask, который выбирает изображения одно за другим и сохраняет их в Data Str / list.

ваш адаптер должен быть «notifyDataSetChanged ()» каждый раз, когда изображение выбирается с сервера.

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

0 голосов
/ 22 ноября 2013

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

0 голосов
/ 04 января 2012

Обработчик против AsyncTask

Я бы использовал asynctask, чтобы загрузить все «новостные ссылки», а затем сделать так, чтобы эта asynctask вызывала asynctask, чтобы загрузить каждый эскиз и обновить пользовательский интерфейс onPostExecute. Затем, если пользователь щелкнет ссылку до того, как она будет сделана, вы можете вызвать метод отмены в основной Asynctask, который проверит isCancelled () между каждой асинхронной пиктограммой эскиза и вернется, если она была отменена.

...