我已添加计时器以在我的应用中显示图片。
有没有办法检查计时器是否正在运行。
检查后,应使用timer.cancel()方法取消计时器。
请告诉我。
答案 0 :(得分:1)
您可以通过记录定时器唯一整数来自行管理,稍后再使用它来取消。我找到一个有用的地方设置/取消这是在onVisibilityChanged(布尔)覆盖。我假设你的定时图像用于动画。
// start
if (renderLoop==-1) renderLoop = UiApplication.getUiApplication().invokeLater( this, 50, true );
// stop
if (renderLoop!=-1)
{
UiApplication.getUiApplication().cancelInvokeLater( renderLoop );
renderLoop = -1;
}
//assumes your screen implements Runnable
public void run() {
// do something cool
}
答案 1 :(得分:1)
Blackberry的Timer
非常俗气 - 就像Runnable
里面有Thread.sleep()
一样。对于Blackberry来说非常普遍,它包含了你实际上并不需要的大量废话,并且不包含你做需要的东西。
我会转储Timer并专门为我的需求创建一个类:
abstract public class MyTimer extends Thread {
private final Object waitobj = new Object();
private volatile boolean running;
private volatile boolean canceled;
private final long due;
public MyTimer setDelay(long delay) {
long cur = System.currentTimeMillis();
due = cur + delay;
return this;
}
public MyTimer setAlarmTime(long dueTimeMillis) {
due = dueTimeMillis;
return this;
}
synchronized void setIsRunning(boolean running) {
this.running = running;
}
synchronized public boolean isRunning() {
return running;
}
synchronized public void cancel() {
synchronized (waitobj) {
canceled = true;
waitobj.notify();
}
}
public void run() {
setIsRunning(true);
long cur = System.currentTimeMillis();
long sleep = due - cur;
while (sleep > 0) {
synchronized (waitobj) {
waitobj.wait(sleep);
}
if (isCanceled()) return;
cur = System.currentTimeMillis();
sleep = due - cur;
}
alarm();
setIsRunning(false);
}
private boolean isCanceled() {
return canceled;
}
abstract void alarm();
}
然后我会这样调用它:
timer = new MyTimer() {
void alarm() {
// do cool things
}
};
timer.setDelay(10000).start();
如果我需要取消它,我会这样做:
if (timer.isRunning()) {
timer.cancel();
}
或只是
timer.cancel();
PS:注意MyTimer课程中的volatile
和synchronized
内容。
答案 2 :(得分:0)
假设您使用Swing在Java中编程,您在Timer类中有一个名为 isRunning()的方法。
http://download.oracle.com/javase/7/docs/api/javax/swing/Timer.html#isRunning%28%29
此致