Почему run () вызывается только один раз? - PullRequest
5 голосов
/ 18 ноября 2011

Рассмотрим этот класс, AnimationThread:

class AnimationThread implements Runnable {
    public void pause() {
        doAnimation = false;
    }

    public void doStart(){
        doAnimation = true;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        if (doAnimation) {
            //my code
        }

        try {
            Thread.sleep(500);
        } 
        catch (InterruptedException e) {

        }
    }
}

Теперь я запускаю этот поток в onCreate действия (просто показывает грубый код):

AnimationThread animRunnable = new AnimationThread();
animationThread = new Thread(animRunnable);
animationThread.start();

Ноrun() вызывается только один раз (я проследил журнал, чтобы подтвердить это).Я просто хочу знать, что когда я запускал поток, почему run() не вызывается повторно с 500 сном.Он просто вызывается один раз.

Ответы [ 3 ]

12 голосов
/ 18 ноября 2011

Вот как это должно быть.

Поток выполняется, выполняя свой метод run (только один раз).После этого он считается выполненным / мертвым / законченным / завершенным.

Если вы хотите выполнить цикл, вы должны сделать это самостоятельно (внутри метода run) или использовать какой-нибудь ExecutorService для повторного вызова Runnable.

8 голосов
/ 18 ноября 2011

Конечно, метод run() будет выполнен один раз. Если вы хотите повторить операторы внутри метода run, вам нужно использовать цикл. Взгляните на TimerTask - запустит задачу в указанное время или несколько раз.

EDIT:

  1. Android - Управление заданием с помощью Timer и TimerTask?
  2. Расписание задач таймера
0 голосов
/ 18 ноября 2011

run() - это метод, который выполняется только один раз любым Thread. Потому что после окончания run method Нить dead or completed.
Таким образом, для одного запуска потока будут выполняться только те. Если вы не хотите уничтожать поток, то вы должны убедиться, что запуск завершен ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...