如果媒体播放在单独的线程中运行?(Should a MediaPlayer run in separ

2019-07-28 08:47发布

我建立来自Web服务器的流音乐的应用程序。 该应用程序有一个使用的MediaPlayer播放前景的服务。

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

在该示例中,没有螺纹除了prepareAsync()调用。 是什么让我困惑的是,当我读到的服务类,我觉得这样的信息:

“注意:一种服务,它的宿主进程,服务的主线程中运行不创建自己的线程,并在一个单独的进程不运行(除非另行指定)。这意味着,如果你的服务是打算做任何CPU密集型工作或阻塞操作(如MP3播放或网络),你应该在服务中创建一个新的线程来完成这项工作,通过使用一个单独的线程,否则会降低应用风险无响应(ANR)错误和应用程序的主线程可以继续致力于用户交互与你的活动“。

我问的原因是应用一些时间(通常失去连接时)的音频流时冻结UI。 我完全理解的是,UI冻结该服务是否让CPU紧张的工作,因为活动和服务的同一线程上运行。 但是,我应该期望MediaPlayer的是这种激烈? 也就是说,它应该在一个单独的线程上运行?

Answer 1:

不幸的是,呼吁prepareAsync()是不够好,以避免ANR提示和您的应用程序挂了几秒钟,特别是如果你打从网络上的文件。 最好的办法是把你的MediaPlayer实例在自己的线程,或者至少是在处理程序中执行集中的调用(如mediaplayer.start() 我一直在使用的MediaPlayer了一年多,我可以告诉你,各种来电之后肯定挂起,视情况而定。



Answer 2:

可以在流媒体音乐是造成主线程停止,直到音乐已完成流? 这可能是为什么它正在放缓是正确的了。

我不是专家,我目前学习自己,但它是值得我们思考的。



Answer 3:

不,如果你正在做你应该保持在一个线程任何网络传输,媒体播放器是不是资源密集型的。 保持它在你的活动。



文章来源: Should a MediaPlayer run in separate thread?