2011-08-30 59 views
1

我已经添加了计时器以在我的应用程序中显示图像。如何检查计时器是否在黑莓上运行

有没有什么办法来检查计时器是否在运行。

检查后,定时器应该使用timer.cancel()方法取消。

请给我hlp。

回答

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

黑莓Timer很俗气 - 它只是像Thread.sleep()Runnable。非常普遍的黑莓手机,它包含很多你不需要的废话,并且不包含你需要的东西需要。

我将转储定时器,使一类专门为我的需求:

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(); 
} 

或者干脆

附注:注意volatile和​​MyTimer类中的东西。