#android
#Android
Вопрос:
Я разрабатываю приложение для чата с помощью xmpp, чтобы заменить мое AsyncTask
лучшим решением (которое не допускает утечки памяти, изменения конфигурации не влияют, управляет очередью заданий, запускает более 1 AsyncTask
в данный момент и т.д.).
Там я придумал решение: IntentService
. Поначалу все выглядит слишком хорошо для этого, что заставляет вас сомневаться в том, что оно слишком хорошее, на данный момент мои AsyncTask
пользователи живут в сервисе, который будет работать в течение нескольких дней, и их работа заключается в отправке и получении по сети.
Итак, теперь в другом сервисе у меня есть слушатели, которые прослушивают пакеты, мне интересно, IntentService
хорошая идея для использования в качестве службы прослушивания (поскольку я видел, что IntentService
работает с Intent
s, поэтому я подумал, может быть, он выполняет некоторые задания по запросам), или я должен поддерживать это с помощью basic Service?
Также мне интересно: зачем использовать, AsyncTask
когда есть IntentService
?
Ответ №1:
там я придумал решение: IntentService
IntentService
Не предназначен для вашего сценария. Он предназначен для выполнения небольшой работы в фоновом потоке, а затем для удаления.
я должен поддерживать это с помощью basic Service?
Да, хотя AsyncTask
, вероятно, в службе не требуется, поскольку обычно вы не хотите ничего делать в основном потоке приложения в службе. Просто используйте Thread
или ThreadPoolExecutor
в сервисе.
Также мне интересно, зачем использовать AsyncTask, когда есть IntentService?
Среди других причин AsyncTask
может использовать пул потоков; IntentService
имеет только один фоновый поток.
Комментарии:
1. мой сценарий выполняет множество сетевых заданий один раз в каждый момент 🙂 и только 1 AsyncTask может быть запущен в данный момент, верно? они являются последовательными, и IntentService встроил Jobqeue, который подходит для меня с небольшой хитростью 😉
2. @user3764748: «и на данный момент может быть запущена только 1 AsyncTask, верно? они являются последовательными » — нет, если вы используете
executeOnExecutor()
.3. не уверен, что это правда, я много слышал, что это серьезная проблема AsyncTask, которая может выполняться только 1 раз за раз
4. @user3764748: Талантливые программисты читают документацию для
AsyncTask
, особенно раздел «Порядок выполнения».