Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is run() getting called just once?

Consider this class, 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) {

        }
    }
}

Now I am starting this thread in onCreate of an activity (just showing rough code):

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

But run() is getting called just once (I traced a log to confirm that). I just want to know that when I started the thread why run() is not getting called repeatedly with 500 sleep. It is just called once.

like image 562
padam thapa Avatar asked Nov 18 '11 05:11

padam thapa


2 Answers

That is how it is supposed to be.

A Thread runs by executing its run method (just once). After that it is considered done/dead/finished/completed.

If you want to loop, you have to do it yourself (inside of the run method), or use some ExecutorService to call the Runnable repeatedly.

like image 52
Thilo Avatar answered Oct 01 '22 22:10

Thilo


Of course the run() method will be executed once. If you want to repeat the statements inside the run method then you have to use loop. Take a look at TimerTask - will runs a task at a specified time or repeatedly.

EDIT:

  1. Android - Controlling a task with Timer and TimerTask?
  2. Timer task schedule
like image 42
KV Prajapati Avatar answered Oct 01 '22 22:10

KV Prajapati