我使用前台服务来播放音乐。我做了一些研究,发现即使我调用stopForeground(true)和stopSelf(),进程也会继续运行。如果我从我的活动的onDestroy调用它,它似乎不起作用。但如果我从另一个地方调用它们,例如当用户单击按钮时,它就会工作。
但如何做到这一点,我的服务被杀死时,应用程序被杀死。


private const val EMPTY_ROOT = "emptyRoot"
private val TAG = SoundsService::class.java.name
class SoundsService : MediaBrowserServiceCompat() {
@Inject
lateinit var mediaSession: MediaSessionCompat
@Inject
lateinit var callback: MediaSessionCallback
override fun onCreate() {
inject()
super.onCreate()
mediaSession.apply {
setCallback(callback)
isActive = true
}
sessionToken = mediaSession.sessionToken
}
override fun onGetRoot(
clientPackageName: String,
clientUid: Int,
rootHints: Bundle?
): BrowserRoot? {
return BrowserRoot(EMPTY_ROOT, null)
}
override fun onLoadChildren(
parentId: String,
result: Result<MutableList<MediaBrowserCompat.MediaItem>>
) {}
override fun onDestroy() {
mediaSession.run {
isActive = false
release()
}
stopForeground(false)
stopSelf()
super.onDestroy()
}
}发布于 2019-12-05 00:42:56
它将在onDestroy中工作。在super调用之前,只需确保您正在调用它。也可以使用ApplicationContenxt实现这一点。
applicationContext.startForegroundService(Intent(this, ServiceTest::class.java));
applicationContext.stopService(Intent(this, ServiceTest::class.java))发布于 2019-12-05 00:37:56
在调用stopForeground(true)或stopSelf()时,是否检查是否有任何崩溃
https://stackoverflow.com/questions/59180631
复制相似问题