我最近注意到我的PlaybackService
是MediaBrowserServiceCompat
的一个子类,意外遭到破坏。重现的步骤:
onDestroy()
方法。如果我将应用程序保留在前台,该服务不会被破坏。我知道听起来我的PlaybackService
是绑定服务,但事实并非如此。每当播放即将开始时,我都会明确地调用startService(new Intent(getApplicationContext(), PlaybackService.class))
(步骤1)。我随后从播放通知管理器中拨打playbackService.startForeground(NOTIFICATION_ID, notification)
,以显示包含播放控件和歌曲元数据的相关通知。考虑到这一点,我只希望在我明确停止服务时销毁服务,或者在极少数情况下,当系统急需内存时。
我明确停止服务的唯一地方是来自onTaskRemoved()
回调和延迟停止处理程序,该处理程序在播放暂停两分钟后运行,自应用程序以来都没有被调用(任务)永远不会被删除 - 它仍然存在于最近的应用程序中。 list - 播放正在进行,直到调用onDestroy()
为止;我和系统都没有在我的测试中暂停播放。
我昨天将手机更新到8.1.0
后似乎已经开始出现此问题,但我无法100%确认这一点。在运行API 23的模拟器上测试相同条件时,我无法重现此问题。
有关为什么我的播放服务在我的8.1.0
设备上被销毁的想法?
答案 0 :(得分:1)
正如@Xenolion在评论中提到的,此问题是由于在Oreo +设备上调用Context.startForeground()
而不是Context.startForegroundService()
引起的。解决方案:
Intent intent = new Intent(application, MusicService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
} else {
context.startService(mixerIntent);
}