我正在构建一个应用程序,该应用程序从Web服务器流式传输音乐。该应用程序具有使用MediaPlayer进行播放的前台服务。
我的代码基于这个示例:http://developer.android.com/guide/topics/media/mediaplayer.html
在这个示例中,除了prepareAsync()调用之外,没有使用任何线程。让我困惑的是,当我阅读Service类的信息时,我发现以下内容:
“注意:服务在其托管进程的主线程中运行——服务不创建自己的线程,也不在单独的进程中运行(除非您另外指定)。这意味着,如果您的服务将执行任何需要大量CPU或阻止操作(如MP3播放或网络),您应该在服务内部创建一个新线程来执行该工作。通过使用单独的线程,您将减少应用程序未响应(ANR)错误的风险,并且应用程序的主线程可以仍然专用于与您的活动进行用户交互。”
我提出问题的原因是,当流式传输音频时,应用程序有时会冻结UI(通常是在失去连接时)。我完全理解,如果服务正在进行CPU密集型工作,则UI会冻结,因为活动和服务在同一线程上运行。但是,我应该期望MediaPlayer如此强烈吗?也就是说,它是否应该在单独的线程上运行?