Handler替代TimerTask

Handler替代TimerTask

原文来自:http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/

作者文中提到,使用TimerTask更新GUI,debug看起来可以,但实际上根本不起作用。
同时作者发现,使用handler可以得到更好的表现。

下面是一个例子,使用handler在100ms后启动一个Runnable:

private Handler handler = new Handler();
handler.postDelayed(runnable, 100);

下面代码里有一个小技巧,实现每隔100ms运行一次Runnable,就像TimerTask的scheduleAtFixedRate()方法:

private Runnable runnable = new Runnable() {
@Override
public void run() {
/* do what you need to do */
foobar();
/* and here comes the "trick" */
handler.postDelayed(this, 100);
}
};

如何取消运行Runnable呢?只需要调用handler.removeCallback(runnable)就可以了。

这样做还有另一个有点,就是不用总是new Timer(Task)了,可以重复使用上面代码中的handler和runnable。



本文采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自Agehua’s Blog,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://agehua.github.io/2017/05/18/handler-replace-timertask/

Share Comments