У меня есть приложение, которое реализует MediaBrowserServiceCompat
. При воспроизведении музыки она запускается на переднем плане с уведомлением управления мультимедиа, что система делает недопустимым. Когда пауза, это выходит из переднего плана, и уведомление сохраняется. Стандартный материал.
Когда эта служба автоматически убивается системой, уведомление не удаляется.
Вы можете смоделировать это, переведя приложение в состояние без паузы переднего плана, выйдя из приложения и выполнив следующую команду:
adb shell am kill com.myapp.package
Уведомление остается. Вы получаете это сообщение Logcat:
W/ActivityManager: Scheduling restart of crashed service com.myapp.package/com.myapp.package.playback.platform.AndroidMediaService
Ни один из очевидных хуков (например, onDestroy
, onTaskRemoved
и т. Д.) В сервисе, похоже, не вызывается - похоже, он полностью убит. Поскольку служба запускается с START_NOT_STICKY
, мы также не получаем onCreate
для нового экземпляра.
Частичное решение этой проблемы состоит в том, чтобы сделать службу прикрепленной и отменить уведомления, когда служба восстановлена . Однако на самом деле это может занять значительное время, во время которого уведомление не работает, поэтому не идеально. Это также может иметь дополнительные последствия.
Другие приложения, похоже, не имеют проблем с этим.
Повторите этот сценарий (пауза, выход из приложения) и выполните команды, например, в Google Play Music:
adb shell am kill com.google.android.music
или Spotify:
adb shell am kill com.spotify.music
и вы обнаружите, что их уведомления немедленно исчезают, как если бы они были отменены при демонтаже.
Что они могут сделать, чтобы это произошло?