不断更新变量

时间:2012-09-06 17:37:15

标签: android delay

我正在编写一个程序,它将不断通过usb接收数据。我希望能够获取此值并将其显示在每季度更新一次的TextView中。我已尝试使用postDelayed处理程序,但只有在我的变量停止更改后,该值才会更新。 (我只是通过递增for循环并输出循环的值来测试它)我也尝试在循环中使用Thread.sleep(250),但这也不起作用。所以基本上我想知道如何每四分钟更新一次TextView。

3 个答案:

答案 0 :(得分:0)

您需要设置某种定期计时器(有几种可用),每250ms会触发一次。由于此计时器(可能)将在与主UI线程不同的线程中运行,并且由于只允许UI线程修改TextView,因此计时器回调将在触发时调用runOnUiThread(runnable);。您的runnable将更新视图。

答案 1 :(得分:0)

Handler mUpdater = new Handler();
Runnable mUpdateView = new Runnable() {
@Override
public void run() {
   tv.setText(newText);
   tv.invalidate();
   mUpdater.postDelayed(this, updateIntervalInMilliSeconds);
 }
}

这将使用更新时的newText自动更新TextView。它将每updateIntervalInMilliSeconds更新一次。只需致电mUpdateView.run()即可启动它。请务必使用onPause()mUpdater.removeCallbacksAndMessages(null)结束时停止更新。

您也可以通过设置在运行中检查的布尔值来停止它。您也可以通过致电mUpdater.postDelayed(mUpdateView, updateInMilliseconds);延迟启动它。

无论哪种方式,postDelayed都是一次性执行,您必须继续调用它才能自动更新。

答案 2 :(得分:0)

您应该有从USB接收数据的方法。在此方法中添加用于更新TextView的代码。

例如:

public void getDataFromUsb(String data){ // or whatever it is you are getting from USB

yourTextView.setText(data);

}

每次从USB获取数据时,此代码都会使用新值刷新TextView