【问题标题】:update TextView every second with ScheduledThreadPoolExecutor使用 ScheduledThreadPoolExecutor 每秒更新 TextView
【发布时间】:2013-08-29 17:50:50
【问题描述】:

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

【问题讨论】:

  • 为什么不使用处理程序
  • 使用处理程序每​​秒更新文本视图。

标签: java android timer timertask


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    无需为此创建单独的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();
    

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

    【讨论】:

    • 哇..太棒了,太简单了!适合我!!谢谢 - 我不需要任何线程或计时器。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-26
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多