android – MediaPlayer应该在单独的线程中运行吗?

前端之家收集整理的这篇文章主要介绍了android – MediaPlayer应该在单独的线程中运行吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个从Web服务器流式传输音乐的应用程序.该应用程序具有使用MediaPlayer播放的前台服务.

我的代码是基于这个例子:http://developer.android.com/guide/topics/media/mediaplayer.html

在该示例中,除了prepareAsync()调用之外,没有任何内容是线程.令我困惑的是,当我阅读关于Service类的时候,我发现这个信息:

“注意:一个服务在其主机进程的主线程中运行 – 该服务不会创建自己的线程,并且不会在单独的进程中运行(除非另有指定),这意味着如果您的服务将执行任何cpu密集型工作或阻塞操作(如MP3播放或网络连接)时,您应该在服务中创建一个新的线程来完成此工作,通过使用单独的线程可以降低应用程序无响应(ANR)错误的风险,应用程序的主线程可以保持专用于与您的活动的用户交互.

我问的原因是应用程序有时候(通常当断开连接时)在流式传输音频时冻结UI.我完全明白,由于活动和服务运行在同一个线程上,因此服务使cpu变得更加强大,UI会冻结.但是,我应该期望MediaPlayer是如此激烈?那就是应该在单独的线程上运行吗?

解决方法

不幸的是,调用prepareAsync()并不足以避免ANR提示和您的应用程序挂起几秒钟,尤其是从网络播放文件时.最好的办法是将MediaPlayer的实例放在自己的线程中,或者至少在Handler中执行密集的调用(如mediaplayer.start()).我一直在使用MediaPlayer一年多,根据具体情况,我可以告诉你,在各种电话之后,它肯定会挂起来.
原文链接:https://www.f2er.com/android/311283.html

猜你在找的Android相关文章