SeekBar-播放时更新进度时MediaPlayer滞后

时间:2018-08-23 12:53:03

标签: java android android-handler android-seekbar

这个问题已经问过几次了,但是我仍然找不到答案。

我正在使用SeekBar更新Handler上的进度,如下所示:

Handler handler = new Handler();
private Runnable runnableCode = new Runnable() {
    @Override
    public void run() {
      mSeekBar.setProgress(mPlayer.getDuration());
      handler.postDelayed(runnableCode, 2000);
    }
};

// Start the initial runnable task by posting through the handler
handler.post(runnableCode);

看完this问题之后。


问题是我遇到延迟。每次SeekBar得到更新时,都会有很小的延迟。

请注意,我并不是在说用户“手动”选择了SeekBar。我知道我应该在进行此操作时检查if(fromUser)中的onProgressChanged

此外,我确实尝试了Timer,但结果相同。

有人遇到过这个问题,我应该如何解决呢?

1 个答案:

答案 0 :(得分:1)

在后台使用Asynctask来移动SeekBar:

异步任务:https://developer.android.com/reference/android/os/AsyncTask

@Override
protected Integer doInBackground(Void... params) {
    if(MainActivity.playing) {
        int percent;
        int position = MainActivity.Player.getCurrentPosition();
        int timeRunning = MainActivity.Player.getDuration();
        if (timeRunning == 0 || position == 0) {
            percent = 0;
        } else {
            percent = (position * 100) / timeRunning;
        }

        return percent;
    }
    return -1;
}
@Override
protected void onPostExecute(Integer result) {
    if(result  != -1){
    MainActivity.Mbar.setProgress(result);}

}

,然后每秒钟在活动中使用计时器执行一次此任务:

计时器:https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html

time.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            new AsyncTask().execute();
        }
    },0,1000);

希望对您有帮助