Приоритеты потоков и служб android

Я читал в Интернете (Зачем использовать сервис, если он работает в одном потоке в android) о службах и потоках и пришел к выводу, что в целом службы имеют более высокий приоритет, чем поток.

У меня есть приложение, которое выполняет операцию загрузки с использованием простых потоков через статический класс и завершается за 5 минут. Но когда я нажимаю кнопку «Домой» и через некоторое время снова открываю приложение, выполнение идет медленнее, потому что я нажал кнопку «Домой».

Я спрашиваю, если я использую службу, будет ли она работать быстрее или при нажатии кнопки «Домой» замедление работы приложений является нормальным, или все приоритеты не имеют значения вместе со временем выполнения?

Спасибо.

1
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Теперь, независимо от того, какое приложение находится на переднем плане, обычно сначала загружается ЦП, но загрузка не является интенсивной операцией с ЦП. Его сеть интенсивна. У вас не будет проблем с тем, чтобы процессор был достаточно длинным, чтобы читать из сокета, даже если он заземлен.

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

Это не только скачивание, я также записываю в базу данных в Room. Так почему же скорость выполнения в фоновом режиме замедляется? Если я четко понимаю, это нормально для любого приложения, верно? Ссылка для скачивания, которую я предоставил, говорит об этом в задокументированном ответе.

Nick 13.09.2018 20:17

Это во многом связано с тонкостями планировщика Linux, но в основном ОС пытается оптимизировать, чтобы предоставить наибольшее количество процессорного времени наиболее интерактивным приложениям. Это почти всегда будет приложение на переднем плане (а если это не так, вероятно, что-то не так), чтобы ваше устройство оставалось максимально отзывчивым. Однако, если у него есть свободное процессорное время, оно запланирует ваше приложение.

Gabe Sechan 13.09.2018 20:20

ОКК. Таким образом, использование потоков или служб не имеет никакого значения для скорости, будь то на переднем плане или в фоновом режиме. Верно? Спасибо

Nick 13.09.2018 20:22

Верно. В связанном сообщении, когда вы видите приоритет, речь идет о приоритете, когда ANdroid убивает процессы, чтобы освободить память. Фоновые действия имеют самый низкий уровень (сначала убиты). Службы переднего плана имеют наивысший уровень (убиты последними), за исключением активности переднего плана (не будут убиты, если вы не перейдете полностью в OOM).

Gabe Sechan 13.09.2018 20:23

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

Nick 14.09.2018 12:23

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

Gabe Sechan 14.09.2018 15:24

Да, но процесс / приложение со службой переднего плана определенно будет быстрее, чем фоновый процесс / приложение (кнопка «Домой» нажата). Так есть ли разница при использовании службы переднего плана?

Nick 14.09.2018 15:31

Нет, они будут такими же. Служба переднего плана с меньшей вероятностью будет уничтожена из-за ресурсов, чем фоновая служба, и не будет ограничена в том, сколько времени ей разрешено работать на новых устройствах. Теперь, если вы думаете, что ваш процесс займет некоторое время, сделайте его службой переднего плана, чтобы он не был убит.

Gabe Sechan 14.09.2018 15:33

Другие вопросы по теме