Handler and Runnable

1) Handler controls the execution of tasks defined by Runnable

2) > Manual stopping : handler.removeCallbacks(runnable)

final Handler handler = new Handler();


        //REPETETION TASK
        final Runnable run = new Runnable() {
            @Override
            public void run() {
                Log.i("Runnable has run!","Repeats every sec");
                //repeat this task devery 1s
                handler.postDelayed(this,1000);
            }
        };

        handler.post(run);
        // To stop this runnable
        //handler.removeCallbacks(run);



        //DELAY TASK : run this task after 3s
        final Runnable run2 = new Runnable() {
            @Override
            public void run() {
                Log.i("Delay task","This task is delayed");
            }
        };

        handler.postDelayed(run2,3000);

Timer

1) Timer is a general java utils, unlike Handler and Runnable which are part of android.os

2) Stopping : timer.cancel()

//TIMER from java utils
        //Start a task after 5 seconds for every 1s
        final Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                Log.i("Another way to time","Java utils Timer");
            }
        },5000,1000);
        //To stop
        //timer.cancel()

Count down timer

Repeats a task at set interval until a max time

//COUNT DOWN TIMER : repeat a task in an interval until certain time
    // every 2s for 10s
    // When we dont store this in new variable, this object is destroyed after count down is finished
    new CountDownTimer(10000,2000) {

        @Override
        public void onTick(long millisUntilFinished) {
            //executed at every interval
            Log.i("Count down",String.valueOf(millisUntilFinished/1000));
        }

        @Override
        public void onFinish() {
            //executed on finish
            Log.i("Count down","Finished");

            // stopping an infinite runnable
            handler.removeCallbacks(run);

            //stop timer
            timer.cancel();
        }
    }.start();

Example project:

Egg timer