Light-weight Timer for Android (background worker)

来源:互联网 发布:java工作日报管理系统 编辑:程序博客网 时间:2024/06/03 13:19

原文:http://www.codeproject.com/Tips/157511/Light-weight-Timer-for-Android-background-worker

 

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 yourAndroid app. You may use java.util.Timerbut 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 theandroid.os.Handler class. Below is the source code of the Timer forAndroid. 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 underThe Code Project Open License (CPOL)

 

原创粉丝点击