Android 如何防止服务在完成工作之前被破坏
如何防止服务在完成工作之前被破坏?我用它来确保设备在工作完成时不会睡着。但我不确定这会不会奏效。在一个特定的地方,我创建了一个MediaPlayer来播放声音,但是在工作了几次之后,我开始得到线程死机的异常,并且查看日志,我看到服务的onDestruct函数在MediaPlayer有机会工作之前被调用 在一个特定的地方,我正在创建一个MediaPlayer来播放声音 任何形式的Android 如何防止服务在完成工作之前被破坏,android,Android,如何防止服务在完成工作之前被破坏?我用它来确保设备在工作完成时不会睡着。但我不确定这会不会奏效。在一个特定的地方,我创建了一个MediaPlayer来播放声音,但是在工作了几次之后,我开始得到线程死机的异常,并且查看日志,我看到服务的onDestruct函数在MediaPlayer有机会工作之前被调用 在一个特定的地方,我正在创建一个MediaPlayer来播放声音 任何形式的IntentService都不适用于该场景。IntentService一旦onHandleIntent()返回(或者在W
IntentService
都不适用于该场景。IntentService
一旦onHandleIntent()
返回(或者在WakefulIntentService
的情况下,当doWakefulWork()
返回时),就会被销毁。不要在IntentService
中执行任何持续时间超过onHandleIntent()
调用的操作
相反,请使用常规的服务
,在该服务中,您可以管理自己的唤醒锁
,在媒体播放完成后(通过OnCompletionListener
)释放该服务并停止该服务
(而且,对于wakeful
IntentService
是适当解决方案的场景,我建议将JobIntentService
置于我的WakefulIntentService
之上)您可以使用前台服务
,但取舍是您必须在Android状态栏中显示前台通知
,或者您可以使用与intentservice相同的JobIntentService
,但它不直接运行服务,而是使用作业来运行服务。有趣。不知怎的,我觉得WakefulIntentService就是不用自己管理WakeLock的门票。@Michael:嗯,WakefulIntentService
管理WakeLock
,但它的核心仍然是IntentService
。你的问题不在于Wakeful
部分,而是IntentService
部分。啊,我明白我的问题了。。。我使用的是WakefulIntentService的旧版本,它扩展了服务,而不是IntentService。@Michael:我不记得写过这样的版本,所以你可能在使用其他人的类。无论如何,您希望在媒体播放完毕之前保持服务运行。在安卓8.0+上,如果媒体超过一分钟,这可能是一个问题。我肯定它是你的,它包含字符串“com.commonware.cwac.wakeful.WakefulIntentService”!我想我可能复制/粘贴了你很久以前写的一篇博文或其他东西。