使用ScheduledThreadPoolExecutor每秒更新TextView

时间:2013-08-29 08:45:59

标签: java android timer timertask

我需要每秒更新一次TextView。我用Timer和TimeTask写了它,但是每个人都说它被弃用的方法。 有人可以告诉我如何制作简单的计时器,每隔1秒更新一次TextView,可能会从UI停止吗?

3 个答案:

答案 0 :(得分:9)

您可以使用处理程序或倒计时器

Handler m_handler;
Runnable m_handlerTask ;  
m_handler = new Handler();   
m_handlerTask = new Runnable()
{
  @Override 
  public void run() { 

    // do something. update text view.  
    m_handler.postDelayed(m_handlerTask, 1000);    

  }
  };
 m_handlerTask.run();

停止

m_handler.removeCallbacks(m_handlerTask);

检查此链接是否有倒计时器,处理程序,计时器

Android Thread for a timer

答案 1 :(得分:6)

无需为此创建单独的Handler(如当前接受的答案)。而是Runnable TextView直接Runnable runnable = new Runnable () { @Override public void run() { // do some work, then repost: textview.postDelayed(runnable, 1000); } }; // post with an initial 1000 ms delay textview.postDelayed(runnable, 1000); // or post without an initial delay textview.post(runnable); // or even run the runnable right away the first time runnable.run(); 的内部消息队列:

TextView

或者,如果您要完成的只是“重绘”{{1}},请使用postDelayed()(或来自非UI线程的invalidate())。还有一些重载允许您将失效限制为特定的矩形,您可以利用它来实现更高效的实现。

答案 2 :(得分:0)

您可以使用简单的处理程序来执行您需要执行的操作。无论如何,使用调度程序方式:

private ScheduledExecutorService scheduler;
...    

if(scheduler != null)
{
    scheduler.shutdown();
    scheduler = null;
}

scheduler = Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate(new Runnable()
{
    public void run()
    {
         // do your stuff...
    }
}, Consts.KEEP_ALIVE_TIMEOUT, Consts.KEEP_ALIVE_TIMEOUT, TimeUnit.MINUTES);