1

代码 :

private void startTimer() {
    final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    int count = 60;
                    time.setText(count - 1 + "");
                    count--;
                }
            });
        }
    }, 0 , 1000, TimeUnit.MILLISECONDS);
}

我想每 1 秒更新一次 TextView 中的文本,但这似乎只适用于第一次,以后的文本不会更新。

有谁知道是什么问题??

4

2 回答 2

5
int count = 60;
private void startTimer() {
final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
       runOnUiThread(new Runnable() {
          public void run() {
             if(count > 0){
               time.setText(count - 1 + "");
               count--;
             }
          }
       });
     }
   }, 0 , 1000, TimeUnit.MILLISECONDS);
}
于 2016-01-29T05:57:07.883 回答
2

阅读如何在 Android 中运行 Runnable 线程

您可以使用处理程序

Handler 允许您发送和处理与线程的 MessageQueue 关联的 Message 和 Runnable 对象。每个 Handler 实例都与单个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它会绑定到创建它的线程的线程/消息队列——从那时起,它会将消息和可运行对象传递到该消息队列并在它们从消息中出来时执行它们队列。

你需要使用handler.postDelayed(new Runnable()方法。

使 Runnable r 添加到消息队列中,在经过指定的时间后运行。runnable 将在附加此处理程序的线程上运行。

 Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
       // Add your code Here

        handler.postDelayed(this, 1000); // You can change your time
      }
    }, 900);
于 2016-01-29T06:15:05.250 回答