0

У меня есть служба, которая выполняет некоторую тяжелую работу над фоновым потоком. Он в основном загружает большой zip (> 5 МБ), сохраняет его, распаковывает, анализирует XML и сохраняет информацию в базе данных SQLite.Приостановить выполнение задачи на фоновом потоке для выполнения задачи с более высоким приоритетом

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

Есть ли способ, которым я мог бы полностью приостановить мое обслуживание (и это фоновая AsyncTask), чтобы я мог запускать свою новую задачу с более высоким приоритетом?

Спасибо!

+0

Вы используете простую нить или AsyncTask в своей службе? Обратите внимание, что на большинстве версий ОС Android _all_ AsyncTasks выполняется в одном потоке, поэтому, если вы используете AsyncTask в своей службе для длительной работы, он заблокирует все будущие AsyncTasks. Что может быть или не быть источником вашей проблемы (требуется более подробная информация). Если это не так, другое предложение заключается в том, чтобы снизить поток вашей службы, а побочным преимуществом является то, что он может даже улучшить отзывчивость пользовательского интерфейса. – Kai

+0

Ошибка. Приложение предназначено для загрузки данных до входа пользователя. – danny117

+0

@Kai Вау, я этого не знал. Я решил, что каждая новая AsyncTask создаст новый поток. Итак, как я могу снизить поток в моем сервисе? –

ответ

1

В соответствии с этим:

stackoverflow.com/questions/18480206/asynctask-vs-thread-in-android

whay вам не попробовать простой Java нить вместо использования AsyncTask. Также вы можете попробовать уделять ему больше внимания, но, на мой взгляд, приоритеты не так эффективны.

+0

Использование потоков Java непосредственно в Android не является хорошей практикой, потому что разработчик должен обрабатывать вручную обратные вызовы и что делать в фоновом режиме, что приводит к большому количеству кодовых табличек. С другой стороны, использование Asynctasks создает также фоновый поток без всякой суеты и переопределяет его методы onPrexecute doInBackground onPostExecute и т. Д. ... помогает вам иметь более чистый код и эффективно управлять обратными вызовами. – Mood

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