Во-первых, рассмотрим <=
вместо <
.
Что еще более важно, вам не нужен фоновый поток с занятым циклом или он не нужен для этого.Сделайте что-то вроде:
Runnable r=new Runnable() {
public void run() {
videoSeekBar.setProgress(player.getCurrentPosition());
if (player.getCurrentPosition()<player.getDuration()) {
videoSeekBar.postDelayed(r, 33);
}
}
};
и где-нибудь позвоните run()
на r
, когда ваше видео запустится.Это будет обновлять SeekBar
примерно 30 раз в секунду.
Ваша текущая реализация представляет собой цикл занятости переднего плана, отправляющий тысячи сообщений в очередь основного потока приложения, что ухудшит производительность воспроизведения видео и приведет к потере заряда батареибез особого преимущества.
Это все еще может не дойти до конца - возможно, видео достигнет конца между вызовом setProgress()
и тестом if
.Истинный тест на то, что он в конце - это OnCompletionListener
, поэтому просто поместите SeekBar
в конце в этой точке.