Click here to Skip to main content
11,413,574 members (71,713 online)
Click here to Skip to main content

Tagged as

Light-weight Timer for Android (background worker)

, 14 Feb 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
A simple and light-wight timer/background worker class for Android that does not spawn new threads.
If you are new to Android development, I am pretty sure some of you may have been through the same problem where you needed a simple periodic timer for your Android app. You may use java.util.Timer but this is not a good choice as this timer creates a new thread for some reason and you don’t want to invoke multiple threads in your mobile app. So I created this simple timer that makes use of the android.os.Handler class. Below is the source code of the Timer for Android. Sorry for the formatting and naming convention. I’m used to the C# conventions.

import android.os.Handler;
 
public class Timer { 
  private int _interval; 
  public int getInterval() { return _interval; } 
  public void setInterval(int delay) { _interval = delay; } 
  private Handler handler; 
  private Runnable _tickHandler; 
  private Runnable delegate; 
  private boolean ticking; 
  public boolean getIsTicking(){ return ticking; } 
  
  public Timer(int interval) 
  { 
    _interval = interval; 
    handler = new Handler(); 
  } 
  
  public Timer(int interval, Runnable onTickHandler) 
  { 
    _interval = interval; 
    setOnTickHandler(onTickHandler); 
    handler = new Handler(); 
  } 
  
  public void start(int interval, Runnable onTickHandler) 
  { 
    if (ticking) return; 
    _interval = interval; 
    setOnTickHandler(onTickHandler); 
    handler.postDelayed(delegate, _interval); 
    ticking = true; 
  } 
  
  public void start() 
  { 
    if (ticking) return; 
    handler.postDelayed(delegate, _interval); 
    ticking = true; 
  } 
  
  public void stop() 
  { 
    handler.removeCallbacks(delegate); 
    ticking = false; 
  } 
  
  public void setOnTickHandler(Runnable onTickHandler) 
  { 
    if (onTickHandler == null) 
      return; 
    
    _tickHandler = onTickHandler; 
    
    delegate = new Runnable() { 
      public void run() 
      { 
        if (_tickHandler == null) return; 
        _tickHandler.run(); 
        handler.postDelayed(delegate, _interval); 
      } 
    }; 
  } 
}

I used this timer to make a TextViewbblink or to update values in the UI from a service, to monitor status, etc. with the following code:

  boolean blinkOn = false; 
  Timer tmrBlink = new Timer(500, new Runnable() { 
 
    public void run() { 
      if (blinkOn) 
      { 
        ((TextView) findViewById(R.id.widget46)).setVisibility(View.VISIBLE); 
      } 
      else 
      { 
        ((TextView) findViewById(R.id.widget46)).setVisibility(View.INVISIBLE); 
      } 
      blinkOn = !blinkOn; 
    } 
    
  });
  
  tmrBlink.start();

I've used this timer in my simple app TaxiMate.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Ross Brigoli
Software Developer (Senior)
Philippines Philippines
Ambitious geek.

MCPD-EA
MCTS .NET 2.0, MCTS .NET 3.5

Comments and Discussions

 
Questionstopping Thread doesn't work Pin
Madhan J at 14-Sep-12 12:25
memberMadhan J14-Sep-12 12:25 
QuestionStopping thread programmatically doesn't work Pin
NNTBIZ at 10-Jun-12 19:39
memberNNTBIZ10-Jun-12 19:39 
Hi, I want to stop the timer programmatically after certain time inside of Runnable something like below.

int count=0; 
  Timer tmrBlink = new Timer(500, new Runnable() { 
 
    public void run() { 
       count++;
      if (count<10) 
      { 
        //Do something
      } 
      else 
      { 
        tmrBlink.stop();
        count=0;
      } 
     } 
 
  });
  
  tmrBlink.start();
It doesn't stop at all. It stops when I try to equal the tmrBlink=null; which is the cause of exception handler error or I put the tmrBlink.stop(); outside of the run loop for example in a click listener.

Thanks for help
vvvvvvvvv

AnswerRe: Stopping thread programmatically doesn't work Pin
Ross Brigoli at 10-Jun-12 21:43
memberRoss Brigoli10-Jun-12 21:43 
GeneralRe: Stopping thread programmatically doesn't work Pin
NNTBIZ at 10-Jun-12 23:47
memberNNTBIZ10-Jun-12 23:47 
Questionthank a million times Pin
mustafabayer at 29-Mar-12 8:37
membermustafabayer29-Mar-12 8:37 
GeneralReason for my vote of 5 D Pin
HemalathaMahesh at 13-Oct-11 14:13
memberHemalathaMahesh13-Oct-11 14:13 
Generalnice Pin
maq_rohit at 27-Mar-11 8:08
membermaq_rohit27-Mar-11 8:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150427.1 | Last Updated 15 Feb 2011
Article Copyright 2011 by Ross Brigoli
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid