我试图每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更新问题?
其次,这是我应该定期运行代码的方式吗?还有更好的方法吗?
答案 0 :(得分:0)
是的,可用的选项很少。
如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.
在上述选项之间进行选择实际上取决于您需要哪种功能。如果您只需要在几个时间间隔内做某事,那么上述任何一项都应该没问题。