为什么run()只被调用一次?

时间:2011-11-18 05:07:59

标签: java android multithreading runnable

考虑这个课程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 个答案:

答案 0 :(得分:12)

这就是应该如何。

线程通过执行其run方法(仅一次)来运行。之后,它被认为是完成/死亡/完成/完成。

如果你想循环,你必须自己做(在run方法内),或者使用一些ExecutorService来重复调用Runnable。

答案 1 :(得分:8)

当然run()方法将被执行一次。如果要重复run方法中的语句,则必须使用循环。看看TimerTask - 将在指定时间或重复运行任务。

编辑:

  1. Android - Controlling a task with Timer and TimerTask?
  2. Timer task schedule

答案 2 :(得分:0)

run()是一种只能由Thread执行一次的方法。因为完成run method线程后dead or completed 所以对于一个线程运行将只执行一个。如果你不想杀死线程那么你必须确保运行完成...