音乐服务意外遭到破坏

时间:2018-01-04 21:38:21

标签: android android-service playback

我最近注意到我的PlaybackServiceMediaBrowserServiceCompat的一个子类,意外遭到破坏。重现的步骤:

  1. 启动应用并播放音乐。
  2. 将应用发送到后台。
  3. 几分钟后,系统会调用服务的onDestroy()方法。
  4. 如果我将应用程序保留在前台,该服务不会被破坏。我知道听起来我的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设备上被销毁的想法?

1 个答案:

答案 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);
}