TextView setText在ScheduledExecutorService runOnUiThread中不起作用

时间:2016-01-29 05:50:22

标签: android textview scheduledexecutorservice android-runonuithread

代码:

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中的文本,但这似乎只是第一次使用,后来的文本没有更新。

任何人都知道这是什么问题吗?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

阅读 How to run a Runnable thread in Android

您可以使用处理程序

  

Handler允许您发送和处理Message和Runnable对象   与线程的MessageQueue相关联。每个Handler实例都是   与单个线程和该线程的消息队列相关联。什么时候   你创建一个新的Handler,它绑定到线程/消息队列   正在创建它的线程 - 从那时起,它将传递   消息和runnables到该消息队列并按它们执行它们   从消息队列中走出来。

您需要使用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);