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

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()
Run Code Online (Sandbox Code Playgroud)

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

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

这是最后的行情

这里有两种方式(同步与异步),可以达到Prepared状态:调用prepare()(同步),一旦方法调用返回就将对象传递给Prepared状态,或者调用prepareAsync()(异步),它在调用返回后首先将对象转移到Preparation状态(几乎正确地发生),同时内部播放器引擎继续处理其余的准备工作,直到准备工作完成.当准备完成或者prepare()调用返回时,如果事先通过setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)注册了OnPreparedListener,则内部播放器引擎会调用OnPreparedListener接口的用户提供的回调方法onPrepared().

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

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

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