Android: 无论前一个滴答声还没有完成,定时器都会滴答作响吗?
Android: Will a Timer tick regardless of the previous tick not yet being finished?
我已经用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 秒,并且计时器本应再次计时。
所以task可能还没有执行完Task,其他tick时间来了。
我想知道计时器是否会不管 TimerTask
操作完成与否!?
答案很简单:不,不是。虽然 TimerTask 在它自己的线程中运行,但它不会在另一个滴答结束之前开始一个新的滴答。
您可以使用这样的测试代码来验证这一点,并检查 logcat 的输出。
Timer testTimer = new Timer();
testTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.d("Test", "Tick: " + SystemClock.elapsedRealtime());
SystemClock.sleep(10000);
}
}, 0, 5000);
我已经用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 秒,并且计时器本应再次计时。
所以task可能还没有执行完Task,其他tick时间来了。
我想知道计时器是否会不管 TimerTask
操作完成与否!?
答案很简单:不,不是。虽然 TimerTask 在它自己的线程中运行,但它不会在另一个滴答结束之前开始一个新的滴答。
您可以使用这样的测试代码来验证这一点,并检查 logcat 的输出。
Timer testTimer = new Timer();
testTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.d("Test", "Tick: " + SystemClock.elapsedRealtime());
SystemClock.sleep(10000);
}
}, 0, 5000);