使用ScheduledThreadPoolExecutor每秒更新TextView

Spe*_*505 2 java android timer timertask

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

Rag*_*dan 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();
Run Code Online (Sandbox Code Playgroud)

停止

m_handler.removeCallbacks(m_handlerTask);
Run Code Online (Sandbox Code Playgroud)

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

用于计时器的Android线程


MH.*_*MH. 6

无需为此创建单独Handler的(如当前接受的答案).在代替,只是postDelayed()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();
Run Code Online (Sandbox Code Playgroud)

或者,如果您要完成的只是"重绘" TextView,请使用invalidate()(或postInvalidate()从非UI线程).还有一些重载允许您将失效限制为特定的矩形,您可以利用该矩形来实现更高效的实现.