2010-11-29 10 views
-1

J'ai essayé Handler, aucune précision obtenu du tout,Comment faire une minuterie précise sur Android?

CountDownTimer, précise la plupart du temps et

TimerTask, toujours précis, mais le premier appel.

Scénario:

Je suis en train d'arrêter son jeu après laps de temps.

appel Code

TimeTask task = new TimeTask(); 
Timer timer = new Timer(); 
task.setMediaPlayer(mediaPlayer); 
timer.schedule(task, 400); 
mediaPlayer.start(); 

J'ai créé MediaPlayer que je donne à la classe qui va TimerTask. Il va libérer MediaPlayer après un certain laps de temps.

classe qui étend TimerTask

private MediaPlayer mMediaPlayer = new MediaPlayer(); 

public void setMediaPlayer(MediaPlayer mediaPlayer) { 
    this.mMediaPlayer = mediaPlayer; 
    mMediaPlayer.start(); 
} 

@Override 
public void run() { 
ListIterator<MediaPlayer> iterator = SoundboardMenu.mMediaPlayerList.listIterator(); 

     while (iterator.hasNext()) { 
      MediaPlayer iteratedPlayer = iterator.next(); 
      if (iteratedPlayer.equals(mMediaPlayer)) { 
       iteratedPlayer.release(); 
       iterator.remove(); 
       break; 
      } 
     } 
} 

Il fonctionne très bien, mais ce n'est pas toujours assez précis.

Si nous attendons plus de 5 secondes après l'appel de la classe pour étendre TimerTask et l'appeler de nouveau, il y aura un peu plus de délai et le son sera plus long. Si nous l'appelons à plusieurs reprises, nous obtenons toujours un délai légèrement plus court.

+1

Combien de temps essayez-vous de chronométrer, et que considérez-vous exact? Que signifie «précis la plupart du temps» et «toujours précis mais sur le premier appel»? – Falmarri

Répondre

2

Le gestionnaire est assez précis, bien qu'il dépende du thread auquel il est associé lorsqu'il exécute réellement sa boucle de messages. Si vous faites le Handler sur votre fil principal, et que votre fil principal sort pour déjeuner pendant 200ms ... eh bien, bien sûr le Handler ne peut pas tirer pendant ce temps.

Bien sûr, vous ne dites pas ce que vous entendez par «exact», il est donc difficile de déterminer ce que vous attendez.

+0

Précis est tout ce qui ne fait pas de son différent sur mon scénario. Je vais essayer le gestionnaire sur un fil séparé plus tard. Merci – asd