2016-12-31 1 views
1

Этот код должен работать неопределенно долго. Однако он успешно запускается один раз, а затем никогда больше. Никаких исключений не бросают, поэтому я не могу понять, что я сделал неправильно. Однако, когда nextExpression не вызывается, он запускается бесконечно.Запланированная служба-исполнитель работает только один раз, никаких исключений не выбрасывается

Вот код:

onCreate() { 

    Runnable Runnable = new Runnable() { 
     public void run() { 
      System.out.println("Hello world"); 
      nextExpression(); 
     } 
    }; 

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); 
    executor.scheduleAtFixedRate(Runnable, 0, 3, TimeUnit.SECONDS); 
} 


int i = 0; 

public void nextExpression() { 
    i++; 
    expression.setText("" + i); 
} 
+1

Какой тип 'expression' и что действительно содержит' реализации setText'? –

+0

Тип выражения - textView – james

ответ

3

Я проверил, и она работает, как и должно быть, если вы хотите обновить компонент пользовательского интерфейса, вы должны сделать это с основным потоком.

Чтобы обновить TextView от основного потока вы можете сделать это следующим образом:

public void nextExpression() { 
    i++; 
    runOnUiThread(new Runnable() { 
     public void run() { 
      expression.setText("" + i); 
     } 
    }); 
} 
+0

Какую часть я должен изменить для этого? – james

3

Ваше обновление пользовательского интерфейса не происходит на UI потоке, но на Threadpool нить, что не будет работать. Для того, чтобы передать обновление UI нить изменить

expression.setText("" + i); 

в

expression.post(new Runnable() { 
      @Override 
      public void run() { 
       expression.setText("" + i); 
      } 
     }); 
Смежные вопросы