SeekBar上的计时器滞后

时间:2017-10-30 20:18:28

标签: android

我试图创建一个简单的音频播放器,但是当我将一个计时器应用于搜索栏以更新它时,一首歌开始滞后。这是代码:

    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);
        });

1 个答案:

答案 0 :(得分:0)

您的计时器每1000毫秒运行一次,并将playProgress的进度更改为当前位置。每当进度发生变化(onProgressChanged)时,您正在向搜索栏的新位置执行seekTo(),这可能会导致延迟。

onProgressChanged签名如下所示:onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) - 如果seekTo变量为fromUser,请尝试仅执行true方法,这意味着您没有以编程方式设置进度(您在计时器中执行此操作)。