如何在Android上制作准确的计时器?

时间:2010-11-29 21:48:39

标签: android timer

我尝试过Handler,完全没有准确性,

CountDownTimer,准确的大部分时间和

TimerTask,在第一次通话时始终准确。

情境:

我试图在特定的时间后停止播放声音。

致电代码

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

我创建了MediaPlayer,我正在给扩展TimerTask的类。它会在特定的时间后释放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 个答案:

答案 0 :(得分:2)

处理程序非常准确,但它依赖于与实际运行其消息循环相关联的线程。如果你在你的主线程上做了Handler,你的主线程要出去吃午饭200分钟......好吧,当然Handler在那段时间里不能开火。

当然,你没有说出“准确”的实际含义,所以很难确定你的期望。