AsyncTask v / s ThreadPoolExecutor для сетевого запроса - PullRequest
3 голосов
/ 10 октября 2011

Я работаю над проектом, в котором мне нужно подключиться к веб-сервису и загрузить данные в формате JSON, которые будут представлены в списке.И все элементы списка имеют там эскизы URL, которые будут загружены и отображены в элементе списка.

Я выполнил всю вызывающую часть как с ThreadPoolExecutor, так и с AsyncTask.

Но изперспектива дизайна, которая является лучшим вариантом из:1. ThreadPoolExecutor2. AsyncTask

Несколько советовThreadPoolExecutor:1. Пользователь может определить нет.одновременных потоков, которые могут быть выполнены.2. Отмена всех запросов сразу.

Несколько советовAsyncTask:1. Внутренне он использует ThreadPoolExecutor, однако мы не можем определить нет.потоков, которые работают одновременно.2. Отменить один запрос легко.3. Возможность прикрепить и отсоединить задачу.4. Обновление пользовательского интерфейса из doInBackground очень просто.

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

Что было бы более подходящим AsyncTask или ThreadPoolExecutor?Если вы можете привести несколько причин, касающихся вашего выбора, это будет полезно.

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

Заранее спасибо.

1 Ответ

6 голосов
/ 12 октября 2011

Я считаю, что AsyncTask полезен, если вы хотите загрузить миниатюру, используя серию «cascade-call»: в onPostExecute вы можете запустить следующую AsyncTask для загрузки следующей миниатюры.

Но если вы хотитедля повышения эффективности я предлагаю использовать ThreadPoolExecutor.Это предложение от developer.android.com :

Пулы потоков решают две разные проблемы: они обычно обеспечивают улучшенную производительность при выполнении большого количества асинхронныхзадач, из-за уменьшения накладных расходов на вызовы для каждой задачи , и они предоставляют средства для ограничения и управления ресурсами, включая потоки, которые используются при выполнении набора задач.Каждый ThreadPoolExecutor также поддерживает некоторую базовую статистику, такую ​​как количество выполненных задач.

В заключение, ThreadPoolExecutor, вероятно, был разработан для таких случаев, как ваш;по этой причине я предлагаю вам этот класс.

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