Приоритеты Android Thread AND Services

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

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

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

Спасибо.


person Nick    schedule 13.09.2018    source источник


Ответы (1)


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

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

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

person Gabe Sechan    schedule 13.09.2018
comment
Это не только загрузка, я также записываю в базу данных в комнате. Так почему скорость выполнения замедляется в фоновом режиме? Если я правильно понимаю, это нормально для любого приложения, верно? Ссылка для скачивания, которую я предоставил, говорит об этом в задокументированном ответе. - person Nick; 13.09.2018
comment
Это во многом связано со сложностями планировщика Linux, но в основном ОС пытается оптимизировать, чтобы дать больше процессорного времени самому интерактивному приложению. Это почти всегда будет приложение на переднем плане (а если это не так, вероятно, что-то не так), чтобы ваше устройство оставалось максимально отзывчивым. Однако, если у него есть свободное процессорное время, оно запланирует ваше приложение - person Gabe Sechan; 13.09.2018
comment
ОКК. Таким образом, использование потоков или служб не имеет никакого значения для скорости, будь то на переднем плане или в фоновом режиме. Верно? Спасибо - person Nick; 13.09.2018
comment
Верно. В связанном посте, когда вы видите приоритет, речь идет о приоритете, когда ANdroid убивает процессы, чтобы освободить память. Фоновые действия имеют самые низкие значения (убиваются первыми). Службы переднего плана имеют самый высокий уровень (убиваются последними), за исключением активности переднего плана (не будут убиты, если вы не перейдете полностью в OOM). - person Gabe Sechan; 13.09.2018
comment
Последний вопрос, Гейб. Если я использую службу переднего плана (для загрузки и вставки в базу данных) и канал уведомлений, даже если я нажимаю кнопку «Домой» для действия, не будет ли это поддерживать нормальную скорость выполнения, как если бы действие выполнялось на переднем плане? (потому что загрузка видна в канале уведомлений) - person Nick; 14.09.2018
comment
Это зависит от того, что еще происходит в телефоне. В лучшем случае это экран ожидания, такой как домашний экран. Тогда вы будете двигаться более или менее с той же скоростью. В худшем случае это может быть что-то вроде запуска игры пользователем. Тогда у вас будет большая конкуренция за процессор. - person Gabe Sechan; 14.09.2018
comment
Да, но процесс/приложение со службой переднего плана будет определенно быстрее, чем фоновый процесс/приложение (нажата кнопка «Домой»). Итак, есть ли разница при использовании службы переднего плана, верно? - person Nick; 14.09.2018
comment
Нет, они будут одинаковыми. Служба переднего плана с меньшей вероятностью будет убита из-за ресурсов, чем фоновая служба, и не будет ограничена в том, как долго она может выполняться на новых устройствах. Теперь, если вы думаете, что ваш процесс займет некоторое время, сделайте его службой переднего плана, чтобы он не был убит. - person Gabe Sechan; 14.09.2018