我已经使用Timer
每30秒执行一次网络操作。
Timer myTimer_30sn_send_alive = new Timer();
myTimer_30sn_send_alive.schedule(new TimerTask() {
@Override
public void run() {
// Send alive message on network
// ....
}
}, 5000, 30 * 1000); // 30sn
如果网络超时为40秒且计时器打算再次打勾。
因此任务可能无法完成任务,另一个滴答时间到来。
我想知道,无论 TimerTask
操作完成与否,计时器都会打开吗?
答案 0 :(得分:1)
答案很简单:不,不是。虽然TimerTask在它自己的线程中运行,但在另一个tick结束之前它不会启动新的tick。
您可以使用这样的测试代码对此进行验证,并检查logcat是否输出。
Timer testTimer = new Timer();
testTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.d("Test", "Tick: " + SystemClock.elapsedRealtime());
SystemClock.sleep(10000);
}
}, 0, 5000);