概述
Android定时器实现一般来说, 包括以下两种:
- java.util.Timer
- android.app.AlarmManager
除此之外, 其实还有一种方式可以实现定时器的效果, 即利用消息循环的Handler来实现.
定时器
众所周知, Handler 可以发送延迟 Message/Runnable, 那么就可以利用其对应接口 handleMessage() / run() 来反复发送延迟消息, 既可实现定时器效果. 一旦不再定时操作了, 调用 Handler.remove**() 就可以清除消息队列中的消息, 也就取消了定时操作.
值得注意的是, 整个定时器操作都是基于消息循环的, 如UI线程的消息循环.
/** package + import */
/** Timer */
public abstract class LiteTimer {
private static final MSG_TIMER = 0x01;
private final Handler mHandler;
/*private*/ long mDelayedMillis = 2000;
public LiteTimer () {
mHandler = new TimerHanlder(this);
}
public void setDelayedMillis(long val) {
mDelayedMillis = val;
}
public void start() {
mHandler.sendEmptyMessageDelayed(MSG_TIMER, mDelayedMillis);
}
public void stop() {
mHandler.removeMessages(MSG_TIMER);
}
protected abstract boolean onTime();
private static class TimerHandler {
private WeakReference<LiteTimer> mRef;
TimerHandler(LiteTimer timer) {
mRef = new WeakReference<LiteTimer>();
}
@Override
public void handleMessage(Message msg) {
LiteTimer timer = mRef.get();
if (timer != null) {
if (timer.onTime()) {
sendEmptyMessageDelayed(MSG_TIMER, timer.mDelayedMillis);
}
}
}
}
}