Java 使用ScheduledThreadPoolExecutor每秒更新TextView

Java 使用ScheduledThreadPoolExecutor每秒更新TextView,java,android,timer,timertask,Java,Android,Timer,Timertask,我需要你每秒钟更新我的文本视图。我用Timer和TimeTask编写了它,但每个人都说它的方法不推荐。 有人能告诉我如何制作一个简单的计时器,每1秒更新一次TextView,并可能从UI停止它吗?您可以使用处理程序或倒计时 Handler m_handler; Runnable m_handlerTask ; m_handler = new Handler(); m_handlerTask = new Runnable() { @Override public void ru

我需要你每秒钟更新我的文本视图。我用Timer和TimeTask编写了它,但每个人都说它的方法不推荐。
有人能告诉我如何制作一个简单的计时器,每1秒更新一次TextView,并可能从UI停止它吗?

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

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);
检查此链接以了解倒计时、处理程序、计时器


您可以使用一个简单的处理程序来完成您需要做的事情。无论如何,通过调度程序,您可以执行以下操作:

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);

无需为此创建单独的
处理程序
(如当前接受的答案)。相反,只需将
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
,请使用(或从非UI线程)。还有一些重载允许您将失效限制在特定的矩形上,您可以利用它来实现更高效的实现。

为什么不使用handleruse处理程序每秒更新文本视图。哇..太棒了,太简单了!为我工作!!谢谢-我不需要任何线程或计时器。