Timertask或Handler

嗨,我有一个快速的问题。 假设我想每10秒钟执行一些操作,并且不一定需要更新视图。 问题是:是否更好(我的意思是更有效和有效)使用计时器与时间任务像这里:

final Handler handler = new Handler(); TimerTask timertask = new TimerTask() { @Override public void run() { handler.post(new Runnable() { public void run() { <some task> } }); } }; timer = new Timer(); timer.schedule(timertask, 0, 15000); } 

或者只是一个postdelayed的处理程序

 final Handler handler = new Handler(); final Runnable r = new Runnable() { public void run() { <some task> } }; handler.postDelayed(r, 15000); 

如果你能解释什么时候使用哪种方法,以及为什么其中一个比另一个更有效率(如果它是真的),我将不胜感激。 谢谢。

HandlerTimerTask

Java TimerTask和Android Handler都允许您在后台线程上安排延迟和重复的任务。 然而,文献压倒性地推荐使用Handler在Android中的TimerTask (请看这里 , 在 这里 , 在这里 , 在这里 , 这里 )。

一些使用TimerTask报告的问题包括:

  • 无法更新UI线程
  • 内存泄漏
  • 不可靠(不总是工作)
  • 长时间运行的任务可能会干扰下一个计划的事件

我见过的各种Android示例的最佳来源是Codepath 。 这里是一个Handler重复任务的例子。

 // Create the Handler object (on the main thread by default) Handler handler = new Handler(); // Define the code block to be executed private Runnable runnableCode = new Runnable() { @Override public void run() { // Do something here on the main thread Log.d("Handlers", "Called on main thread"); // Repeat this the same runnable code block again another 2 seconds handler.postDelayed(runnableCode, 2000); } }; // Start the initial runnable task by posting through the handler handler.post(runnableCode); 

有关

  • 处理器与定时器:定期执行和固定执行率的android开发

使用Timer有一些缺点

它只创build一个线程来执行任务,如果一个任务需要很长时间才能运行,其他任务将受到影响。 它不处理由任务抛出的exception,线程只是终止,这会影响其他计划任务,并且它们永远不会运行

复制自:

TimerTask与Thread.sleep vs Handler postDelayed – 每N毫秒最准确的调用函数?