如何在服务完成之前保持服务不被销毁?我正在使用WakefulIntentService确保设备在工作完成时没有入睡。但我不确定这是否会奏效。在一个特定的地方,我创建一个MediaPlayer来播放声音,但是在工作几次之后我开始得到关于该线程已经死亡的异常,并查看日志中我看到该服务的onDestruct功能是在媒体播放器有机会完成其工作之前被召唤。
答案 0 :(得分:1)
在一个特定的地方,我正在创建一个播放声音的MediaPlayer
任何形式的IntentService
都不适合这种情况。 IntentService
返回后会onHandleIntent()
被销毁(或者WakefulIntentService
,doWakefulWork()
返回时)。 IntentService
中的任何内容都不会超过onHandleIntent()
来电。
相反,请使用常规Service
,管理您自己的WakeLock
,在媒体播放完成后通过OnCompletionListener
释放并停止服务。
(而且,FWIW,我建议JobIntentService
优先于我的WakefulIntentService
,适用于清醒IntentService
是合适解决方案的情况。
答案 1 :(得分:0)
您可以使用Foreground Service
,但需要权衡的是,您需要在Android foreground notification
中显示status bar
,或者您可以使用相同的JobIntentService
作为intentservice,但不是直接运行服务,而是使用Jobs来运行服务。