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

标签 android

如何防止服务在完成工作之前被销毁?我正在使用 WakefulIntentService以确保设备在工作完成时不会睡着。但我不确定这是否有效。在一个特定的地方,我正在创建一个 MediaPlayer 来播放声音,但是在工作了几次之后,我开始收到关于线程已死的异常,并且查看日志我看到在媒体播放器之前调用了该服务的 onDestruct 函数有机会完成它的工作。

最佳答案

In one particular place I'm creating a MediaPlayer to play a sound

任何形式的IntentService都不适合那个场景。 IntentServiceonHandleIntent() 返回后被销毁(或者,在 WakefulIntentService 的情况下,当 doWakefulWork()返回)。不要在 IntentService 中做任何会持续到 onHandleIntent() 调用之后的事情。

相反,使用常规的 Service,您可以在其中管理自己的 WakeLock,在媒体播放完成时释放它并停止服务(通过 OnCompletionListener )。

(而且,FWIW,我会推荐 JobIntentService 而不是我的 WakefulIntentService,对于唤醒 IntentService 是合适的解决方案的场景)

关于android - 如何防止服务在完成工作之前被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268141/

相关文章:

java - 为每个选项卡 fragment 动态生成不同的内容(来自 JSON)

android - java.lang.NoSuchMethodError : No static method registerDefaultInstance with Firebase Performance and Espresso Instrumented Tests

android - 如何在像 Viber 这样的 GCM 通知上打开独立的弹出窗口

Android:具有两种背景颜色的按钮

android - file.delete() 从 android 内部存储返回 false

java - 在 Web 服务中使用 OAuth 时出现异常

java - 改造 android @Multipart 删除默认 header

android - Ionic 4 - 如何在 Web 浏览器中打开 URL 而不是在 Android App 上的应用程序中打开 webview?

java - Android HttpClient - 证书中的主机名不匹配 <example.com> != <*.example.com>

Android Studio - 无法打开PNG文件