0

我试图每 3 秒定期运行一段代码,这可以改变按钮的颜色。

到目前为止,我有:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(2);

// This schedule a runnable task every 2 minutes
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
    public void run() {

        queryFeedback2(); // display the data
    }
}, 0, 3, TimeUnit.SECONDS);

此代码将运行这段代码,但不会使用结果更新我的 UI。

首先,什么代码会导致我的 UI 更新问题?

其次,这是我应该定期运行代码的方式吗?有没有更好的办法?

4

1 回答 1

0

是的,可用的选项很少。

  1. 线
  2. 可运行
  3. 定时器任务

正如 alex2k8 在他们的回答中所说:

final Runnable r = new Runnable()
{
    public void run() 
    {
        tv.append("Hello World");
        handler.postDelayed(this, 1000);
    }
};

handler.postDelayed(r, 1000);

或者我们可以使用普通线程,例如(使用原始 Runner):

Thread thread = new Thread()
{
    @Override
    public void run() {
        try {
            while(true) {
                sleep(1000);
                handler.post(r);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

thread.start();

您可以将可运行对象视为可以发送到消息队列以执行的命令,而将处理程序视为用于发送该命令的辅助对象。

更多细节在这里 http://developer.android.com/reference/android/os/Handler.html

您可以从处理程序更新 UI。使用处理程序的教程,线程可用here。

在上述选项之间进行选择实际上取决于您需要什么样的功能。如果您只需要每隔一段时间做一些事情,那么上述任何一项都应该没问题。

于 2012-09-17T04:44:14.193 回答