我尝试过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秒,那么将会有更多的延迟和声音播放更长时间。如果我们反复调用它,那么我们总是会稍微缩短延迟。
答案 0 :(得分:2)
处理程序非常准确,但它依赖于与实际运行其消息循环相关联的线程。如果你在你的主线程上做了Handler,你的主线程要出去吃午饭200分钟......好吧,当然Handler在那段时间里不能开火。
当然,你没有说出“准确”的实际含义,所以很难确定你的期望。