Scheduled Executor Service 只运行一次,不抛异常
Scheduled Executor Service is only running once, no exceptions are thrown
此代码应 运行 无限期。但是,它成功 运行 一次,然后再也没有。没有异常被抛出,所以我无法弄清楚我做错了什么。但是,当不调用 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);
}
我测试过它可以正常运行,如果你想更新一个 UI 组件你应该用主线程来做。
要从主线程更新 textView,您可以这样做:
public void nextExpression() {
i++;
runOnUiThread(new Runnable() {
public void run() {
expression.setText("" + i);
}
});
}
您的 UI 更新不是发生在 UI 线程上,而是发生在线程池线程上,这是行不通的。将更新中继到 UI 线程修改
expression.setText("" + i);
至
expression.post(new Runnable() {
@Override
public void run() {
expression.setText("" + i);
}
});
此代码应 运行 无限期。但是,它成功 运行 一次,然后再也没有。没有异常被抛出,所以我无法弄清楚我做错了什么。但是,当不调用 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);
}
我测试过它可以正常运行,如果你想更新一个 UI 组件你应该用主线程来做。
要从主线程更新 textView,您可以这样做:
public void nextExpression() {
i++;
runOnUiThread(new Runnable() {
public void run() {
expression.setText("" + i);
}
});
}
您的 UI 更新不是发生在 UI 线程上,而是发生在线程池线程上,这是行不通的。将更新中继到 UI 线程修改
expression.setText("" + i);
至
expression.post(new Runnable() {
@Override
public void run() {
expression.setText("" + i);
}
});