Rozważmy tej klasy AnimationThread
:Dlaczego funkcja run() jest wywoływana tylko raz?
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) {
}
}
}
Teraz zaczynam ten wątek w onCreate
z działalności (tylko pokazano kod szorstki):
AnimationThread animRunnable = new AnimationThread();
animationThread = new Thread(animRunnable);
animationThread.start();
Ale run()
jest uzyskiwanie nazywa się tylko raz (Wywiodłem dziennik, aby to potwierdzić). Po prostu chcę wiedzieć, że kiedy zacząłem wątek, dlaczego run()
nie jest wywoływany wielokrotnie z 500 snu. Jest to tylko raz wywoływane.
Dzięki. Mam logikę. Upewniam się, że w środku uruchomiłem mój kod logiczny działający wielokrotnie. Właściwie w mojej sytuacji chcę, aby run() wykonywał nieskończenie w moim celu, więc zamknąłem swoją logikę podczas gdy (true) wewnątrz run i animacja występuje w oparciu o stan zmiennej stanu do3nimation. Dzięki. –
To jest wspólny wzorzec. Prawdopodobnie jednak chcesz, aby wątek zakończył się ostatecznie, aby zamknąć program. Lub możesz użyć do tego wątku demona. – Thilo