2010-11-29 2 views
-1

は、必ずしも正確ではなく最初の呼び出しには全く正確性、Androidで正確なタイマーを作成するには?私はハンドラを試してみました

CountDownTimer、正確な時間のほとんどと

TimerTaskをを得ませんでした。

シナリオ:

私は特定の時間の後に、音の再生を停止しようとしています。

コード

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

呼び出すと、私はTimerTaskをを拡張するクラスに与えているのMediaPlayerを作成しました。特定の時間が経過するとMediaPlayerが解放されます。それが正常に動作しますが、それは十分必ずしも正確ではありません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; 
      } 
     } 
} 

を拡張

クラス。

TimerTaskを継承しているクラスを呼び出してからもう一度呼び出すと、5秒以上待つと、わずかに遅延とサウンド再生時間が長くなります。私たちがそれを繰り返し呼び出すと、私たちは常に少し遅れて遅延を取得します。

+1

あなたはどのくらい時間をかけようとしていますが、正確とはどういうことを考えていますか? 「正確な時間」と「常に正確だが最初の呼び出しでは」とはどういう意味ですか? – Falmarri

答えて

2

Handlerは実際にメッセージループを実行しているスレッドに依存しますが、非常に正確です。メインスレッドでハンドラーを実行していて、メインスレッドが200msのランチに出ていたら...もちろん、ハンドラーはその間に起動することはできません。

実際には「正確」とは何を意味するのではないので、あなたが何を期待しているのかを判断するのは難しいです。

+0

正確なのは私のシナリオでは違う音を出さないものです。私は後で別のスレッドでハンドラを試してみます。ありがとう – asd

関連する問題