Android:PrepareAsync()和Prepare()之间的媒体播放器区别

时间:2014-08-22 11:54:46

标签: android android-mediaplayer

我想实现基本的媒体播放器功能,并且在PrepareAsync()之间感到困惑 和Prepare()方法调用。如果音频文件位于原始文件夹中,应使用哪一个。

2 个答案:

答案 0 :(得分:11)

这些方法之间的区别主要在于它们执行的线程。

Prepare在您调用它的线程(最常见的UI线程)中运行,因此如果需要很长时间(从Internet缓冲视频等),它将阻止您的UI线程,用户可能会获得ANR。

PrepareAsync在后​​台线程中运行,因此UI线程不会被阻止,因为它几乎立即返回。但是播放器没有准备好,所以你想设置onPreparedListener以便知道MediaPlayer何时可以使用。

答案 1 :(得分:9)

当我们想要同步播放我们的媒体文件时,通常会使用

prepare()方法。 当我们想要异步播放时,通常会使用prepareAsync()。

例如:

mediaplayer.prepare()

用于从本地媒体资源播放文件。

mediaplayer.prepareAsync()通常用于在流上播放实时数据。它允许在不阻塞主线程的情况下播放。 如果我们使用prepare()进行实时数据流传输,它最终会崩溃,因为数据是在流中接收的。 基本上prepare()首先加载所有数据,然后播放。因此,它允许同步播放媒体文件。 prepareAsync()播放缓冲区中的数据。

这是最后的行情

  

这是Prepared的两种方式(同步与异步)   可以达到状态:要么调用prepare()(同步)哪个   方法调用后,将对象传输到Prepared状态   首先返回,或者调用prepareAsync()(异步)   在调用返回后将对象传送到准备状态   (内部玩家引擎)(几乎正确的方式发生)   继续研究其余的准备工作,直到   准备工作完成。准备完成时或何时完成   prepare()调用返回,内部播放器引擎然后调用用户   提供了回调方法,OnPreparedListener的onPrepared()   接口,如果事先通过注册OnPreparedListener   setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)。

主要区别在于,当我们使用文件时,我们调用prepare(),当我们使用流时,我们调用prepareAsync()。

在你的情况下,它必须是prepare()方法

检查prepareAsync()prepare(),参考明确说明的文档