问题运行代码定期更新UI上的按钮颜色

时间:2012-09-17 04:39:17

标签: android android-layout scheduled-tasks

我试图每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更新问题?

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

1 个答案:

答案 0 :(得分:0)

是的,可用的选项很少。

  1. 可运行
  2. 的TimerTask
  3. their answer here中的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();
    
         

    您可以将runnable对象视为可以执行的命令   发送到消息队列执行,处理程序只是一个帮助器   用于发送该命令的对象。

         

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

    您可以从中更新用户界面 处理程序。使用处理程序的教程,线程可用here.

    在上述选项之间进行选择实际上取决于您需要哪种功能。如果您只需要在几个时间间隔内做某事,那么上述任何一项都应该没问题。