计划的执行程序服务只运行一次,不会抛出任何异常

时间:2016-12-31 22:41:41

标签: java android scheduledexecutorservice

此代码应无限期运行。但是,它成功运行一次,然后再也不会运行。没有例外,因此我无法弄清楚我做错了什么。但是,当没有调用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);
}

2 个答案:

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