как проверить, работает ли таймер на ежевике - PullRequest
1 голос
/ 30 августа 2011

Я добавил таймер для отображения изображений в моем приложении.

Есть ли способ проверить, работает ли таймер или нет.?

после проверки таймер следует отменить с помощью метода timer.cancel ().

Пожалуйста, помогите мне.

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Вы можете управлять этим самостоятельно, записав уникальное целое число таймеров и использовать его позже для отмены.Я нашел полезное место для установки / отмены этого в переопределении 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 голос
/ 31 августа 2011

Blackberry's 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: Примечание volatile и synchronized вещи в классе MyTimer.

0 голосов
/ 30 августа 2011

Предполагая, что вы программируете на Java с помощью Swing, у вас есть метод с именем isRunning () в классе Timer.

http://download.oracle.com/javase/7/docs/api/javax/swing/Timer.html#isRunning%28%29

Привет

...