我正在构建一个从Web服务器流式传输音乐的应用程序.该应用程序具有使用MediaPlayer播放的前台服务.
我的代码是基于这个例子:http://developer.android.com/guide/topics/media/mediaplayer.html
在该示例中,除了prepareAsync()调用之外,没有任何内容是线程.令我困惑的是,当我阅读关于Service类的时候,我发现这个信息:
“注意:一个服务在其主机进程的主线程中运行 – 该服务不会创建自己的线程,并且不会在单独的进程中运行(除非另有指定),这意味着如果您的服务将执行任何cpu密集型工作或阻塞操作(如MP3播放或网络连接)时,您应该在服务中创建一个新的线程来完成此工作,通过使用单独的线程可以降低应用程序无响应(ANR)错误的风险,应用程序的主线程可以保持专用于与您的活动的用户交互.
我问的原因是应用程序有时候(通常当断开连接时)在流式传输音频时冻结UI.我完全明白,由于活动和服务运行在同一个线程上,因此服务使cpu变得更加强大,UI会冻结.但是,我应该期望MediaPlayer是如此激烈?那就是应该在单独的线程上运行吗?