Context.startForegroundService () ANR без фактического вызова - PullRequest
0 голосов
/ 30 мая 2018

После обновления моего приложения до целевого API 27 (ранее 25) я столкнулся со многими ANR от пользователей, которые я не могу воспроизвести.Похоже, они связаны с пределами выполнения фона Oreo с сообщением ANR

Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{73bc351 u0 com.xxx.xxxx/.player.PlayFileService}

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

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

В моем случае, хотя я не звонил Context.startForegroundService() напрямую, он вызывался, потому что мое музыкальное приложение уходило в фоновый режим, а служба разрушалась системой.Затем, когда пользователь нажал мультимедийную кнопку, чтобы возобновить воспроизведение через пару минут, служба перезапустилась бы системой с этим вызовом, поскольку приложение находилось в фоновом режиме.В конце концов я позвонил startForeground(), но это было после нескольких настроек.Я добавил вызов к startForeground() в начале onCreate() моего сервиса с пустым уведомлением, и все мои ANR исчезли.

0 голосов
/ 30 мая 2018

На основе документации:

До Android 8.0 обычным способом создания службы переднего плана было создание фоновой службы, а затем продвижение этой службы на передний план. С Android 8.0 есть осложнение;система не позволяет фоновому приложению создавать фоновый сервис .По этой причине в Android 8.0 появился новый метод startForegroundService() для запуска новой службы на переднем плане.

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

Вы можете выполнить это SO , который описывает подход для правильного запуска службы переднего плана с Каналом Уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...