5

Я хочу знать, что лучше скачивать файлы, асинхронную задачу или услугу?Задача Async по сравнению с сервисом для загрузки данных

Мое приложение имеет восемь кнопок, на которых запускается одно скачивание (загрузка которого составляет ~ 10 МБ). Когда пользователь нажимает одну кнопку или более для загрузки данных, лучше использовать асинхронную задачу или службу?

Спасибо!

ответ

5

В любом случае вы должны использовать AsyncTask, потому что даже обслуживание выполняется в главном (GUI) потоке, где не должно быть сети. Независимо от того, следует ли запускать AsyncTask в сервисе или действии, зависит от того, хотите ли вы, чтобы загрузка продолжалась в фоновом режиме.

+0

Спасибо @StenSoft, поэтому если приложения идет в фоновом режиме или пользователь переходит к другому действию, асинхронная задача останавливается? – Caaarlos

+1

Нет, но без обслуживания, все приложение может быть убито системой в любое время в фоновом режиме. – StenSoft

+0

Хм знаю, я понимаю, что мне нужно использовать в этот момент! Поэтому я буду использовать AsyncTask. Вы решили мою ошибку, спасибо StenSoft! – Caaarlos

1

AsyncTask - AsyncTask манипулировать темы и/или обработчик, если вы можете сделать это лучше с Looper и прочим зачем? AsyncTask спроектирован как вспомогательный класс вокруг Thread и Handler, и в идеале его следует использовать для коротких операций (максимум на несколько секунд). .. Как вы можете указать в рабочем режиме, не займет много времени? вероятно, плохая сеть, медленная сеть, застрявшая сеть, перезагрузка телефона - и все это, вероятно, сделает вашу загрузку либо поврежденной, либо недоработанной. Я являюсь пользователем приложений, и я злюсь, когда теряю пучок ни на что.

если вы спросите меня, использовать

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

1

все выше ответы имеют хорошие моменты. но проблема жизненного цикла - это самое важное, что вы должны учитывать. например, скажем, вы используете asyncTask. поэтому пользователь начинает загрузку, и внезапно он поворачивает экран, и, поскольку вы связали жизненный цикл asyncTask с activity, произойдет еще одна операция asyncTask и приведет к компульсивному 10-мегабайтному скачиванию. поэтому, учитывая это, вы должны использовать service и asyncTask вместе, чтобы сохранить проблему жизненного цикла и проблему сетевого потока пользовательского интерфейса.

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

 Смежные вопросы

  • Нет связанных вопросов^_^