在安卓开发过程中经常需要执行一些短周期性的任务,可以选择Handler或者Time来实现。看一下二者的区别,Handler在多个方面表现比Time优秀更推荐使用。
1.易用性
Handler可以重复执行某个任务。
Timer若在某个任务执行/取消之后。若想再次执行会抛出一个IllegalStateException。为了避免这个异常,需要重新创建一个Timer对象
2.周期可调整
若要执行一个越来越快的周期任务,Handler可以做到,而Timer则消耗比较大
Handler.
private var handler : Handler = Handler()
private val mDelayTime = 1000
private var runnable = Runnable(){
public void run(){
//更新操作
update()
if(mDelayTime > 0){
handler.postDelayed(this,mDelaytime)
mDelaytime -= 100
}
}
}
handler.postDelayed(this,mDelayed)
如上例子就可以实现对周期的动态调整
Timer的schedeleAtFixedTime(TimerTask timeTask,long delay,long period)只能执行周期性的任务所以不能调整周期,若想要动态调整需要在执行完一个定时器任务后,
再启动一个新的任务时设置新的时间
3.UI界面更新
handler:再创建时候可以指定创建线程,一般在Activity中创建即主线程中。所以可以很方便的在回调方法中更新界面。
Timer:
异步回调多以必须借助handler去更新界面,不方便。
既然都用handler去更新界面了,为何不把定时器功能也交给handler呢
4.内存占比
Timer比handler更占内存
Handler完成同样的定时任务所占的内存只占用了Timer的1/60
所以handler的方式更加节省内存
无论从易用性还是内存占比Handler都完胜Timer