考虑这个课程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次睡眠重复调用。它被称为一次。
答案 0 :(得分:12)
这就是应该如何。
线程通过执行其run方法(仅一次)来运行。之后,它被认为是完成/死亡/完成/完成。
如果你想循环,你必须自己做(在run方法内),或者使用一些ExecutorService来重复调用Runnable。
答案 1 :(得分:8)
当然run()
方法将被执行一次。如果要重复run
方法中的语句,则必须使用循环。看看TimerTask - 将在指定时间或重复运行任务。
编辑:
答案 2 :(得分:0)
run()
是一种只能由Thread
执行一次的方法。因为完成run method
线程后dead or completed
所以对于一个线程运行将只执行一个。如果你不想杀死线程那么你必须确保运行完成...