Java 播放服务器音乐时冻结android应用程序
我有一个在线音乐播放器,我的问题是当用户按下播放按钮 我的应用程序冻结1或2秒(网络速度)。Java 播放服务器音乐时冻结android应用程序,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我有一个在线音乐播放器,我的问题是当用户按下播放按钮 我的应用程序冻结1或2秒(网络速度)。 我播放服务器链接的音乐,并将其放入语音变量中,然后播放该链接的流。 我的代码有什么问题? 谢谢 我的代码: detail_voice.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar snackbar = Snackbar.
我播放服务器链接的音乐,并将其放入语音变量中,然后播放该链接的流。
我的代码有什么问题?
谢谢 我的代码:
detail_voice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar snackbar = Snackbar.make(detail_date, " " + "دارم میگیرررررررررمش :| :)))", Snackbar.LENGTH_SHORT);
snackbar.show();
try {
mp.setDataSource(Voice);
mp.prepare();
mp.start();
detail_voice.setVisibility(View.GONE);
detail_voice_stop.setVisibility(View.VISIBLE);
} catch (IOException e) {
e.printStackTrace();
}
}
});
detail_voice_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
detail_voice.setVisibility(View.VISIBLE);
detail_voice_stop.setVisibility(View.GONE);
mp.stop();
mp.reset();
detail_voice_stop.setVisibility(View.GONE);
}
});
您提供的代码并不广泛,但我猜您的问题可能确实与通过网络加载数据有关。通常,在通过网络加载数据时,您希望异步执行此操作,以避免程序不必要地等待数据,并在这段时间内冻结 MediaPlayer类有一个prepareAsync()方法,可以为您执行此操作。但是,您不能再将start()方法放在下面,因为它现在是异步的。尝试替换此代码:
mp.setDataSource(Voice);
mp.prepare();
mp.start();
为此:
mp.setDataSource(Voice);
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer player) {
player.start();
}
});
mp.prepareAsync();
如果该代码解决了问题,那么您的连接确实是问题所在。但是,每次单击时都应使用setOnPreparedListener()方法。我建议将它移到onClickListener()方法之外,这样它只执行一次
也有一个很好的实现。这可能也值得一读。我的回答完全回答了你的问题吗?