Как говорится в вопросе, вот код.
Что я хочу сделать, так это то, что у меня есть список массивов, который говорит "myArray".Этот массив содержит сохраненные моменты времени в миллисекундах.Далее я хочу вызвать метод, основанный на этих временных точках.Итак, мне нужно запустить счетчик времени от 0 во время воспроизведения музыки, сравнивать счетчик времени с точками времени в массиве постепенно (от индекса первого массива до конца).
Первый метод "timeCounter"метод запуска счетчика времени во время воспроизведения музыки через MediaPlayer.
public void timeCounter(){
Runnable myRunnable = new Runnable(){
@Override
public void run(){
while(musicPlaying){
startCounter(arrayPos);
}
}
};
Thread musicPlayer = new Thread(myRunnable);
musicPlayer.start();
}
Здесь проводится сравнение счетчика времени и времени в массиве.
public void startCounter(List<Long> array){
elapsedTime = System.currentTimeMillis() - timeStart;
if(elapsedTime == array.get(arrayPos)){
arrayPos += 1; //Continue comparing with the next number in the array
Log.v("DEBUG", "TIME MATCHES!");
if(arrayPos>= array.size()){
arrayPos= 0; //Prevent out of array index
}
}
}
У меня правильно работает код, и результат LogCat верный.
Теперь проблема в том, что иногда поток не работает, пока не закончится воспроизведение музыки (я установил onCompletionListener и установил "musicPlaying" в false, когда музыказаконченный).Точка остановки является абсолютно случайной, иногда, когда она только начинается, или около 50%, или даже когда она близка к завершению.Иногда это даже не начинается!Я пытался выяснить, почему, но я не мог найти информацию о том, что Thread останавливается на полпути или что-то подобное.Заранее спасибо!=)