use*_*986 11 android android-mediaplayer
我想实现基本的媒体播放器功能,并且在PrepareAsync()和Prepare()方法调用之间感到困惑.如果音频文件位于原始文件夹中,则应使用哪一个.
cli*_*oot 12
这些方法之间的区别主要在于它们执行的线程.
Prepare 在您调用它的线程(最常见的UI线程)中运行,因此如果需要很长时间(从Internet缓冲视频等),它将阻止您的UI线程,用户可能会得到ANR.
PrepareAsync在后台线程中运行,因此UI线程不会被阻止,因为它几乎立即返回.但是玩家没有准备好所以你想要设置onPreparedListener以便知道何时MediaPlayer可以使用.
Aks*_*dam 10
当我们想要同步播放我们的媒体文件时,通常使用prepare()方法.当我们想要异步播放时,通常使用prepareAsync().
例如:
mediaplayer.prepare()
它用于从本地媒体资源播放文件.
mediaplayer.prepareAsync()通常用于通过流播放实时数据.它允许在不阻塞主线程的情况下播放.如果我们prepare()用于实时数据流,它最终会崩溃,因为数据是在流中接收的.基本上prepare()它首先加载所有数据然后播放.因此,它允许同步播放媒体文件.并prepareAsync()在缓冲区中播放数据.
这是最后的行情
这里有两种方式(同步与异步),可以达到Prepared状态:调用prepare()(同步),一旦方法调用返回就将对象传递给Prepared状态,或者调用prepareAsync()(异步),它在调用返回后首先将对象转移到Preparation状态(几乎正确地发生),同时内部播放器引擎继续处理其余的准备工作,直到准备工作完成.当准备完成或者prepare()调用返回时,如果事先通过setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)注册了OnPreparedListener,则内部播放器引擎会调用OnPreparedListener接口的用户提供的回调方法onPrepared().
主要区别在于,当我们使用文件时,我们调用prepare(),当我们使用流时,我们调用prepareAsync().
在你的情况下,它必须是prepare()方法
检查prepareAsync()和prepare()参考其明确说明的文档
| 归档时间: | 
 | 
| 查看次数: | 8300 次 | 
| 最近记录: |