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.
How to create repetitive task using Handler
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
How to create repetitive task using Timer
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.
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 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.
Which one to use Obviously i will recommend to use Handler with Runnable
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 TimerIn 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 |
Handler Memory Graph |
Timer Memory Graph |
相关文章推荐
- 【Android应用开发技术:应用调试】GDB
- 【Android应用开发技术:应用调试】ADB
- 【Android本地开发技术:媒体开发】AVI视频格式解析
- 探究Android系统中解析JSON数据的方式
- Android之——模拟实现检测心率变化的应用实例
- android sqlite操作(2)
- [Android]attrs.xml的自定义VIEw
- Android 基础控件之CheckBox与RadioButton
- Android EditText setOnClickListener事件 只有获取焦点才能响应 采用setOnTouchListener解决
- Android Studio打包APK时出现 is not translated in "en" (English) [MissingTranslation]
- Android线程
- 学习android编程之路(5)— Toast使用方法
- Android自定义视图
- Android像素与dip的关系
- android studio升级失败提示 Connection failed解决方法
- Android开发加载音乐文件时
- Android自定义视图
- Android 5.0 android:elevation 如果给button设置效果
- Android AlertDiaog自定义EditText自动弹出软键盘
- 【TabLayout】 Android 另一种Tab的实现