【发布时间】:2018-05-16 11:53:59
【问题描述】:
我目前正在开发音频播放应用程序,并且正在使用已启动的绑定服务在后台播放音乐。我使用以下代码启动并绑定到服务。
val intent = Intent(context, MusicService::class.java)
context.startService(intent)
context.bindService(intent, serviceConnection, 0)
播放时提升到前台,音乐暂停时降级。
// onAudioPlay
service.startForeground(NOTIFY_ID, notification)
// onAudioPause
service.stopForeground(false)
到目前为止,服务工作正常。但是,当用户在暂停状态下滑动(删除)通知时,服务会在几秒钟后崩溃并给出此错误。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myplayer, PID: 4380
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1775)
android.os.Handler.dispatchMessage(Handler.java:105)
android.os.Looper.loop(Looper.java:164)
android.app.ActivityThread.main(ActivityThread.java:6541)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这只发生在奥利奥上,我已经阅读了奥利奥的背景限制。但是以下几点让我感到困惑。
- 此服务为绑定服务(不受限制)
- 我从不使用 Context.startForegroundService() 来启动服务。(也不想使用它)
- 服务从前台降级时不会崩溃,它是在删除通知时发生的。
为什么服务会崩溃?我究竟做错了什么?如果有人告诉我这里发生了什么,我将非常感激。
【问题讨论】:
-
这很有趣。我建议您将解决方案发布为答案并将其标记为已接受,而不是编辑问题。未来的读者也会更清楚。
-
@YuchenZhong 感谢您的建议。我添加了一个答案。
标签: android service kotlin android-8.0-oreo