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

pad*_*apa 5 java multithreading android 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) {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我开始onCreate一个活动的这个线程(只显示粗略的代码):

AnimationThread animRunnable = new AnimationThread();
animationThread = new Thread(animRunnable);
animationThread.start();
Run Code Online (Sandbox Code Playgroud)

但是run()只被调用一次(我追踪了一个日志来确认).我只是想知道,当我启动线程时,为什么run()不会在500次睡眠时反复调用.它被称为一次.

Thi*_*ilo 12

这就是应该如何.

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

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


ada*_*ost 8

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

编辑:

  1. Android - 使用Timer和TimerTask控制任务?
  2. 计时器任务计划