您的位置:首页 > 移动开发 > Android开发

Handler vs Timer : fixed-period execution and fixed-rate execution android development

2015-07-31 15:45 691 查看
From:http://androidtrainningcenter.blogspot.com/2013/12/handler-vs-timer-fixed-period-execution.html

In Android Timer and Handler are both can be used for repetitive call. We can do same piece of task using
either Timer or Handler (With runnable). First going to pros and cos of each we should look what documentation says about both. Its very important to avoid memory leak in android application

Timer Recurring
tasks are scheduled with either a fixed period or a fixed rate:

• With the default fixed-period execution, each successive run of a task is scheduled relative to the start
time of the previous run, so two runs are never fired closer together in time than the specified period.

• With fixed-rate execution, the start time of each successive run of a task is scheduled without regard
for when the previous run took place. This may result in a series of bunched-up runs (one launched immediately after another) if delays prevent the timer from starting tasks on time.

Handler

to schedule messages and runnables to be executed as some point in the future; and
to enqueue an action to be performed on a different thread than your own.




Handler Implementation

How to create repetitive task using Handler

[code]  Handler mHandler;
  public void useHandler() {
    mHandler = new Handler();
    mHandler.postDelayed(mRunnable, 1000);
  }

  private Runnable mRunnable = new Runnable() {

    @Override
    public void run() {
      Log.e("Handlers", "Calls");
      /** Do something **/
      mHandler.postDelayed(mRunnable, 1000);
    }
  };


How to remove pending execution from Handler

mHandler.removeCallbacks(mRunnable);

How to schedule it again

mHandler.postDelayed(mRunnable, 1000);

Where to perform Task

Runnable works under UI thread so you can update UserInterface in Handler respective Runnable




Timer Implementation

How to create repetitive task using Timer

[code]  public void useTimer() {
    Timer mTimer = new Timer();
    mTimer.cancel();
    mTimer.schedule(new TimerTask() {

      @Override
      public void run() {
        Log.e("Timer", "Calls");
      }
    }, 1000, 1000);
  }


How to remove pending execution from Timer

mTimer.cancel(); will cancel all the schedule task.

How to schedule it again

You can not reschedule Timer again. So you to create object of timer again if you are trying to reschedule
its task.




Comparison Handler VS Timer

While rescheduling Handler is very easy, you can not reschedule Timer

In Handler you can attach to any Runnable but Timer schedule for only one TimerTask

TimerTask is purely background task so you can not update UserInterface, but that's not true for Handler's Runnables



Timer Cause Execption
Timer tends to leak more memory compare to Handler see the graph of object retains by timer and Handler. It will increase rapidly for Timer if you are creating and scheduling new task.



Handler Memory Graph


Timer Memory Graph
Which one to use Obviously i will recommend to use Handler with Runnable
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: