Замена коллбека
Здравствуйте, уважаемые!
У меня такой вопрос. Пишу велосипед в виде плеера аудио под андроид и столкнулся с проблемой. Для отображения прошедшего времени при проигрывании файла я использую класс Handler и метод postDelayed. И вроде бы все работает хорошо. Но проблема появляется такая. У меня есть список воспроизведения, и при клике на какую-либо песню она должна воспроизвестись. Допустим, я кликнул на песне и пошло воспроизведение. В специальном TextView отображается, сколько прошло времени. Потом я кликаю на другой песне, и старая песня должна перестать воспроизводиться, а вместо нее должна воспроизводиться новая. Все это мной реализовано, но проблема в отображении прошедшего времени. Когда я заменяю в плеере старую песню на новую и начинаю ее воспроизводить, я также заменяю коллбэк в Handler'е и в новом коллбэке уже слежу за прогрессом воспроизведения новой песни. Но почему-то старый коллбек не удаляется, и получается, что одновременно оба коллбека работают, из-за чего текствью, в котором отображается время, постоянно мерцает.
Вот мой код для коллбеков:
// сначала я удаляю старый коллбек
durationHandler.removeCallbacksAndMessages(null);
player.setOnCompletionListener(onCompletion);
// затем сбрасываю данные в плеере
player.reset();
// устанавливаю для воспроизведения новую песню
player.setDataSource(filename);
player.prepare();
final int duration = player.getDuration();
player.start();
// устанавливаю новый колбек
durationHandler.postDelayed(
new Runnable() {
@Override
public void run() {
int progress = player.getCurrentPosition();
demonstrator.setProgress(progress, duration);
durationHandler.postDelayed(this, REPEAT_TIME);
}
}, 400);
....
private OnCompletionListener onCompletion = new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
durationHandler.removeCallbacksAndMessages(null);
}
};
Почему-то после начала проигрывания новой песни старый коллбек не удаляется, и с этого момента отрабатывают уже два коллбека. Как этого избежать и почему это происходит? Спасибо. заранее!