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