Android MediaBrowserServiceCompat:Context.startForegroundService()然后没有调用Service.startForeground()

Android MediaBrowserServiceCompat:Context.startForegroundService()然后没有调用Service.startForeground(),android,mediabrowserservicecompat,mediabrowserservice,Android,Mediabrowserservicecompat,Mediabrowserservice,我有一个音乐播放器应用程序,最近我从常规服务切换到MediaBrowserServiceCompat。该服务是由框架自动创建的(onCreate方法在应用程序启动时调用),我只在play action时作为前台启动它 ANR出现在一些设备上,特别是三星,但也出现在索尼、诺基亚、AllView等设备上 class MusicService: MediaBrowserServiceCompat() { override fun onCreate() { super.onCreate()

我有一个音乐播放器应用程序,最近我从常规服务切换到MediaBrowserServiceCompat。该服务是由框架自动创建的(onCreate方法在应用程序启动时调用),我只在play action时作为前台启动它

ANR出现在一些设备上,特别是三星,但也出现在索尼、诺基亚、AllView等设备上

class MusicService: MediaBrowserServiceCompat() {

  override fun onCreate() {
    super.onCreate()
    .....
 }

 override fun onTaskRemoved(rootIntent: Intent?) {
    super.onTaskRemoved(rootIntent)
    stopSelf()
 }

  fun moveServiceToStartedState(){
     if (!mServiceInStartedState) {
          ContextCompat.startForegroundService(
                  this@MusicService,
                  Intent(this@MusicService, MusicService::class.java))
          mServiceInStartedState = true
      }

      startForeground(PlayerNotificationManager.NOTIFICATION_ID, notification)
  }

  fun  moveServiceOutOfStartedState() {
     if(mServiceInStartedState) {
       stopForeground(true)
       stopSelf()
       mServiceInStartedState = false
     }
  }

  fun updateNotificationForPause(state: PlaybackStateCompat) {
      stopForeground(false)
      ................
  }

private inner class MediaPlayerListener: PlaybackInfoListener() {

   private val mServiceManager: ServiceManager = ServiceManager()

   override fun onPlaybackStateChange(state: PlaybackStateCompat) {

      // Manage the started state of this service.
      when (state.state) {
         PlaybackStateCompat.STATE_PLAYING -> mServiceManager.moveServiceToStartedState(state)
         PlaybackStateCompat.STATE_PAUSED -> mServiceManager.updateNotificationForPause(state)
         PlaybackStateCompat.STATE_ERROR -> {
            mServiceManager.updateNotificationForPause(state)
            Toast.makeText(this@MusicService, R.string.error, Toast.LENGTH_SHORT).show()
         }
         PlaybackStateCompat.STATE_STOPPED -> mServiceManager.moveServiceOutOfStartedState()
      }
   }

}
我总是在ContextCompat.startForegroundService之后调用startForeground…


有什么方法可以调试/重现/修复此问题吗?

为什么要调用
startForegroundService
?如果您已经绑定,
startService()
+
startForeground()
足以让您处于正确的状态。为什么要调用
startForegroundService
?如果您已经绑定,
startService()
+
startForeground()
足以让您处于正确的状态。