我有一个实现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 音乐上:
adb shell am kill com.google.android.music
或 Spotify:
adb shell am kill com.spotify.music
你会发现他们的通知会立即消失,就好像它们在拆解时被取消了一样。
他们可能会做些什么来实现这一点?