Android MediaBrowserServiceCompat:Context.startForegroundService()然后没有调用Service.startForeground()
我有一个音乐播放器应用程序,最近我从常规服务切换到MediaBrowserServiceCompat。该服务是由框架自动创建的(onCreate方法在应用程序启动时调用),我只在play action时作为前台启动它 ANR出现在一些设备上,特别是三星,但也出现在索尼、诺基亚、AllView等设备上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()
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()
足以让您处于正确的状态。