2011-08-30 86 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類中的東西。