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