此代码应无限期运行。但是,它成功运行一次,然后再也不会运行。没有例外,因此我无法弄清楚我做错了什么。但是,当没有调用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);
}
答案 0 :(得分:3)
我测试了它并且它应该运行,如果你想更新一个UI组件,你应该用主线程来做。
要从主线程更新textView,您可以这样做:
public void nextExpression() {
i++;
runOnUiThread(new Runnable() {
public void run() {
expression.setText("" + i);
}
});
}
答案 1 :(得分:3)
您的UI更新不是在UI线程上发生的,而是在线程池线程上发生的,但它不会起作用。要将更新中继到UI线程修改
expression.setText("" + i);
到
expression.post(new Runnable() {
@Override
public void run() {
expression.setText("" + i);
}
});