|
在Android应用开发中,会经常需要有定时器Timer的需求,一种方案是直接使用java.util.Timer来做定时器,但需要多线程来完成。如果您不想在应用中使用过多的多线程,那么使用下面这个简单的定时器是一个可选的方案。下面的例子是使用了android.os.Handler来完成的。
Java代码:
import android.os.Handler;
public class Timer {
private int _interval;
public int getInterval() { return _interval; }
public void setInterval(int delay) { _interval = delay; }
private Handler handler;
private Runnable _tickHandler;
private Runnable delegate;
private boolean ticking;
public boolean getIsTicking(){ return ticking; }
public Timer(int interval) {
_interval = interval;
handler = new Handler();
}
public Timer(int interval, Runnable onTickHandler) {
_interval = interval;
setOnTickHandler(onTickHandler);
handler = new Handler();
}
public void start(int interval, Runnable onTickHandler) {
if (ticking) return;
_interval = interval;
setOnTickHandler(onTickHandler);
handler.postDelayed(delegate, _interval);
ticking = true;
}
public void start() {
if (ticking) return;
handler.postDelayed(delegate, _interval);
ticking = true;
}
public void stop() {
handler.removeCallbacks(delegate);
ticking = false;
}
public void setOnTickHandler(Runnable onTickHandler) {
if (onTickHandler == null)
return;
_tickHandler = onTickHandler;
delegate = new Runnable() {
public void run() {
if (_tickHandler == null) return;
_tickHandler.run();
handler.postDelayed(delegate, _interval);
}
};
}
}
下面是调用Timer的例子:
Java代码:
boolean blinkOn = false;
Timer tmrBlink = new Timer(500, new Runnable() {
public void run() {
if (blinkOn) {
((TextView) findViewById(R.id.widget46)).setVisibility(View.VISIBLE);
}
else
{
((TextView) findViewById(R.id.widget46)).setVisibility(View.INVISIBLE);
}
blinkOn = !blinkOn;
}
});
tmrBlink.start();
这个例子不难,希望对大家有一点的帮助。 |
|