Ограничения фоновой службы Android и приложение voip

Я работаю над приложением voip. Я делаю всю логику, касающуюся сигнализации, на фоновом сервисе. Когда пользователь существует приложение, я останавливаю службу. В этом случае я не подключен к серверу. Когда я нахожусь в этом состоянии, сервер отправляет push-уведомление (FCM), я запускаю службу и создаю уведомление о входящем звонке или сообщении. Пока все хорошо :)

Я прочитал об ограничениях Oreo для фоновых служб и понял, что теперь мне нужно запустить службу на переднем плане, показывая уведомление. Затем я хотел проверить, как это делает Hangouts (google), и, конечно же, они запускают службу в фоновом режиме при получении сообщения. Я что-то упускаю?

Спасибо


person User1980    schedule 07.12.2017    source источник


Ответы (1)


Видимая активность = передний план

Когда пользователь существует приложение, я останавливаю службу

Если это означает, что служба работает только тогда, когда ваше приложение видно пользователю, то процесс и служба фактически находятся на переднем плане, и у вас не должно возникнуть проблем с тем, что система убивает вашу службу:

Приложение считается активным, если выполняется одно из следующих условий:

  • Он имеет видимую активность, независимо от того, запущена она или приостановлена.

FCM получен = передний план

Кроме того, получение высокоприоритетных сообщений FCM поместит ваше приложение во временный белый список для фоновой обработки, и у вас будет более чем достаточно времени для обработки в это время, или вы всегда можете запустить службу переднего плана после получения FCM — например, служба, которая обрабатывает вызов и должна отображать уведомление во время работы:

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

  • Обработка высокоприоритетного сообщения Firebase Cloud Messaging (FCM).

Дизайн вашего приложения — обработка входящих вызовов путем получения приоритета FCM, а затем создание службы вызовов переднего плана — кажется разумным.

Обратитесь к документации, в которой эти темы действительно понятны.

person maciekjanusz    schedule 07.12.2017
comment
Да, я уже планировал запустить его на переднем плане, но мне интересно, как Hangouts или Viber обходятся без него. Особенно, если в документе указано: После того как система создала службу, у приложения есть пять секунд, чтобы вызвать метод службы startForeground(), чтобы отобразить уведомление о новой службе, видимое пользователю. Если приложение не вызывает startForeground() в течение установленного времени, система останавливает службу и объявляет приложение ANR. Конечно, я полагаю, что цель сборки установлена ​​на 26:) - person User1980; 07.12.2017
comment
Вы имеете в виду, что эти приложения не отображают уведомление переднего плана, пока вызов активен? Кроме того, закрытие приложения убивает вызов или нет? (не пользуюсь ни вайбером, ни хангаутами) - person maciekjanusz; 07.12.2017
comment
Я про сообщения и уведомление о входящем звонке (не новинки). Сценарий для видеовстречи, например: когда видеовстречи не работают, а вы получаете сообщение. Уведомление отображается. Когда вы переходите к параметрам разработчика -> запущенные службы, вы видите, что в Hangouts запущена служба (не в режиме переднего плана)... - person User1980; 07.12.2017