Я проходил через Bound Service на сайте разработчика Android. Я думал, что понял сервис достаточно, но я просто нашел другой способ подключения сервиса через использование класса Messenger
особенно для локального сервиса. Там я запутался. Может быть, я неправильно понял концепцию.
Вот мое понимание Android Service
. Вы создаете сервис, когда
- Вы хотите сделать отдельные работы в фоновом режиме.
- Вы хотите сделать это отдельным процессом.
- Вы хотите, чтобы он работал в жизненном цикле, независимом от компонента, который его запустил.
Путаница - это первый элемент в списке, определение фона. Разве фон не является потоком или процессом? Я никогда не думал, что он может работать в главном потоке.
Вот предостережение обслуживания на страницах разработчиков о.
Внимание: служба запускается в главном потоке своего хост-процесса - служба не создает свой собственный поток и не запускается в отдельном процессе (если не указано иное). Это означает, что, если ваша служба будет выполнять какие-либо работы с ЦП или блокировать операции (такие как воспроизведение MP3 или работа в сети), вы должны создать новый поток в службе для выполнения этой работы. Используя отдельный поток, вы уменьшите риск ошибок приложения не отвечающего (ANR), а основной поток приложения может оставаться выделенным для взаимодействия пользователя с вашими действиями.
Вопросы
- Почему выбирают использовать сервис, если сервисная функция все равно будет работать в главном потоке?
- Нужно ли нам писать сервис только для блокировки ANR, даже если трудоемкая работа выполняется в главном потоке? Предположим, услуга только для моего приложения.
- Существуют ли какие-либо практические случаи или причины использовать службу как частную и работающую в одном потоке?