#android #service
#Android #Обслуживание
Вопрос:
Я хотел бы узнать больше о setForeground()
методе в Service
классе.
Кто-нибудь может объяснить это подробно?
Ответ №1:
setForeground()
не рекомендуется, и я думаю, что просто не работает на более новых версиях Android. Вместо этого вы хотите более новый startForeground()
.
Цитирую себя из одной из моих книг:
Однако некоторые службы будут пропущены пользователем, если они таинственным образом исчезнут. Например, приложение музыкального проигрывателя по умолчанию, которое поставляется с Android, использует сервис для фактического воспроизведения музыки. Таким образом, пользователь может слушать музыку, продолжая использовать свой телефон для других целей. Служба останавливается только тогда, когда пользователь заходит и нажимает кнопку stop в активности музыкального проигрывателя. Если бы эта служба была неожиданно отключена, пользователь мог бы задаться вопросом, что не так.
Подобные сервисы могут объявлять себя частью «переднего плана». Это приведет к повышению их приоритета и уменьшит вероятность того, что им не хватит памяти. Компромисс заключается в том, что служба должна поддерживать
Notification
, чтобы пользователь знал, что эта служба претендует на часть переднего плана. И, в идеале, этоNotification
обеспечивает простой путь обратно к некоторому действию, где пользователь может остановить службу.Чтобы сделать это в
onCreate()
вашем сервисе (или где-либо еще в жизни сервиса это имело бы смысл), вызовитеstartForeground()
. Для этого требуетсяNotification
и локально уникальное целое число, точно так же, какnotify()
метод наNotificationManager
. Это приводит к появлениюNotification
и переводит службу в приоритет переднего плана. Позже вы можете вызватьstopForeground()
, чтобы вернуть обычный приоритет.
Комментарии:
1.да, Service.setForeground () теперь устарел и в версии 2.0 ничего не делает.