如何防止服务在完成工作之前被销毁

时间:2017-09-17 19:37:04

标签: android

如何在服务完成之前保持服务不被销毁?我正在使用WakefulIntentService确保设备在工作完成时没有入睡。但我不确定这是否会奏效。在一个特定的地方,我创建一个MediaPlayer来播放声音,但是在工作几次之后我开始得到关于该线程已经死亡的异常,并查看日志中我看到该服务的onDestruct功能是在媒体播放器有机会完成其工作之前被召唤。

2 个答案:

答案 0 :(得分:1)

  

在一个特定的地方,我正在创建一个播放声音的MediaPlayer

任何形式的IntentService都不适合这种情况。 IntentService返回后会onHandleIntent()被销毁(或者WakefulIntentServicedoWakefulWork()返回时)。 IntentService中的任何内容都不会超过onHandleIntent()来电。

相反,请使用常规Service,管理您自己的WakeLock,在媒体播放完成后通过OnCompletionListener释放并停止服务。

(而且,FWIW,我建议JobIntentService优先于我的WakefulIntentService,适用于清醒IntentService是合适解决方案的情况。

答案 1 :(得分:0)

您可以使用Foreground Service,但需要权衡的是,您需要在Android foreground notification中显示status bar,或者您可以使用相同的JobIntentService作为intentservice,但不是直接运行服务,而是使用Jobs来运行服务。