SeekBar - MediaPlayer 在播放时更新进度时滞后
SeekBar - MediaPlayer lag when updating progress while playing
这个问题问了好几次了,还是找不到答案。
我正在使用 Handler
更新 SeekBar
的进度,如下所示:
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
更新时,都会有一点延迟。
请注意,我不是在谈论用户 'manually' 选择 SeekBar
的时间。我知道这样做时我应该在 onProgressChanged
中检查 if(fromUser)
。
此外,我确实尝试了 Timer
结果相同。
有没有人遇到过这个问题,我应该如何解决这个问题?
在后台使用 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);}
}
然后在你的 Activity 中使用计时器每秒执行一次此任务:
定时器: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);
希望对你有帮助
这个问题问了好几次了,还是找不到答案。
我正在使用 Handler
更新 SeekBar
的进度,如下所示:
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
更新时,都会有一点延迟。
请注意,我不是在谈论用户 'manually' 选择 SeekBar
的时间。我知道这样做时我应该在 onProgressChanged
中检查 if(fromUser)
。
此外,我确实尝试了 Timer
结果相同。
有没有人遇到过这个问题,我应该如何解决这个问题?
在后台使用 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);}
}
然后在你的 Activity 中使用计时器每秒执行一次此任务:
定时器: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);
希望对你有帮助