我想停止一个前台服务,该服务仅在单击Activity上的特定按钮后才扩展MediaLibrarySession,因此我尝试:
val serviceIntent = Intent(this@PartyHostActivity, PlayerService::class.java)
stopService(serviceIntent)
和
val serviceIntent = Intent(this@PartyHostActivity, PlayerService::class.java)
startService(serviceIntent)
stopService(serviceIntent)
但它们都没有停止服务,MediaLibraryService上的onDestroy
函数从未被调用!!!!为什么?!!!!
2条答案
按热度按时间7eumitmz1#
stopService()
方法可能不会立即停止服务。对于前台服务,您需要在服务的代码中显式调用
stopForeground(true)
,以从前台删除服务并允许其停止。这将触发MediaLibraryService
中的onDestroy()
方法。在您的活动中:
在您的
MediaLibraryService
中:通过发送带有操作“STOP_SERVICE”的Intent,您可以将停止服务的请求与其他启动请求区分开来。在
onStartCommand()
方法中,检查此操作,然后调用stopForeground(true)
和stopSelf()
以正确停止服务。bf1o4zei2#
问题是我在服务上运行了两个线程,并且我没有为
session
和player
调用release()
方法,因此stopForeground()
和stopSelf()
无法工作。我尝试创建一个方法来停止和释放所有,并在onStartCommand
方法上调用了该方法,操作为"STOP_SERVICE"
,如答案here和onDestroy()
已成功调用