我试图创建一个简单的音频播放器,但是当我将一个计时器应用于搜索栏以更新它时,一首歌开始滞后。这是代码:
final SeekBar playProgress = findViewById(R.id.playProgress);
playProgress.setMax(mPlayer.getDuration());
//++++++++Lagging++++++++++++
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run () {
playProgress.setProgress(mPlayer.getCurrentPosition());
}
},0,1000);
//+++++++++++++++++++++++++++
playProgress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
{
@Override
public void onProgressChanged (SeekBar seekBar,int i, boolean b){
mPlayer.seekTo(i);
});
答案 0 :(得分:0)
您的计时器每1000毫秒运行一次,并将playProgress
的进度更改为当前位置。每当进度发生变化(onProgressChanged
)时,您正在向搜索栏的新位置执行seekTo()
,这可能会导致延迟。
onProgressChanged
签名如下所示:onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
- 如果seekTo
变量为fromUser
,请尝试仅执行true
方法,这意味着您没有以编程方式设置进度(您在计时器中执行此操作)。