开发过程中总是会碰到一些“什么鬼,原来这么简单”等等的问题,比如今天碰到
Android MediaPlayer+SeekBar播放音频出现卡顿可能问题?
代码段一:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {//<span style="color:#ff0000;"> 注意点</span>
try {
if (!mPlayer.isPlaying()) {
try {
mPlayer.reset();
mPlayer.setDataSource(mediaFile.toString());
mPlayer.prepareAsync();
// mPlayer.prepare();
mPlayer.start();
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
}
mPlayer.seekTo(seekBar.getProgress());
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
});
因为在实现播放的过程中,进度条进行不断的刷新如:
然而在代码段一中,在播放的过程中,seekBar不断监听到进度变化public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}currentPosition = mPlayer.getCurrentPosition(); seekBar.setProgress(currentPosition);
如果没有加入if (fromUser) {}(判断是否来自用户操作)这层判断的话,不断执行如下代码:音频播放就会产生卡顿!try { mPlayer.reset(); mPlayer.setDataSource(mediaFile.toString()); mPlayer.prepareAsync(); // mPlayer.prepare(); mPlayer.start(); } catch (IllegalStateException | IOException e) { e.printStackTrace(); }
什么鬼,原来这么简单!