Наличие слушателей в Service или IntentService?

#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 , особенно раздел «Порядок выполнения».