使用IntentService进行MediaPlayer播放

7
使用 IntentService 进行后台点播的 MediaPlayer 播放是否合理?根据 开发者指南IntentService 的生命周期仅限于其正在执行任务的时间。考虑到每次想要播放曲目时重新初始化 MediaPlayer 所带来的开销,似乎这不是一个好主意...

所以我的问题是:使用此类 Service 会产生多大的实际开销?它会对系统/应用程序的性能产生可感知的影响吗?我应该使用自己实现的具有专用工作线程的 Service 吗?

1个回答

12
使用IntentService来进行后台MediaPlayer播放是否合理?在我看来不合理,因为您无法真正地用这种方式更改曲目。此外,您需要知道曲目何时完成,但是您不能通过这种方式实现,除非通过泄漏内存。最后,这意味着Android将终止您的进程,可能会在onHandleIntent()结束后的几毫秒内进行,这样就得不到一个有用的音乐播放器。
我应该使用自己实现的带有专用工作线程的Service吗?你可能不需要线程,因为MediaPlayer的许多内容已经是异步的。只有在您自己进行网络I/O、磁盘I/O或其他操作时才需要自己的线程。但是,拥有一个Service——并且可能是前台Service——是音乐播放器的典型方法。

1
根据这篇文章:articlestart() 方法不是异步的。这难道不会阻塞调用者的线程吗? - wodzu
@CommonsWare 如果我的服务正在播放音频,同时又不断地被调用,这意味着有时我需要播放一个音频,有时需要依次播放多个音频,那么你有什么建议? 我不需要对媒体播放器进行控制,也就是说我不需要暂停或寻找。 我需要在服务中使用onHandleIntent来处理它们,但是在onStartCommand中需要手动处理这些意图。 - Jahangir Kabir
@JahangirKabir:“你有什么建议?”-- 一个服务可以轻松处理你所描述的内容。 “但在服务中,我需要在onStartCommand中手动处理这些意图”-- 正确。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接