我必须每隔10秒显示一些数据。谁能告诉我怎么做?
答案 0 :(得分:59)
还有另一种方法可用于在特定时间间隔更新UI。以上两个选项是正确的,但取决于您可以使用其他方式在特定时间间隔更新UI的情况。
首先为Handler声明一个全局变量,以便从Thread更新UI控件,如下所示
Handler mHandler = new Handler();
现在创建一个Thread并使用while循环来定期使用线程的sleep方法执行任务。
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Write your code here to update the UI.
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
答案 1 :(得分:11)
最简单的事情可能是:
while(needToDisplayData)
{
displayData(); // display the data
Thread.sleep(10000); // sleep for 10 seconds
}
或者您可以使用计时器:
int delay = 1000; // delay for 1 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
displayData(); // display the data
}
}, delay, period);
答案 2 :(得分:7)
安德拉在定义处理程序方面处于正确的轨道上。如果你有一个调用更新函数的处理程序,你只需delay the message发送给处理程序10秒钟。
通过这种方式,您无需启动自己的线程或类似的线程,这将导致奇怪的错误,调试和维护问题。
请致电:
Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui.
myHandler.sendMessageDelayed(message, 10000);
现在你的handleMessage函数将在10秒后被调用。您可以在更新功能中发送另一条消息,导致整个周期一遍又一遍地运行
答案 3 :(得分:7)
使用Handler还有另一种方法
final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Display Data here
}
}, intervalTime);
答案 4 :(得分:4)
有一种简单的方法可以在每10秒后显示一些数据。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
ActionStartsHere();
}
public void ActionStartsHere() {
againStartGPSAndSendFile();
}
public void againStartGPSAndSendFile() {
new CountDownTimer(11000,10000) {
@Override
public void onTick(long millisUntilFinished) {
// Display Data by Every Ten Second
}
@Override
public void onFinish() {
ActionStartsHere();
}
}.start();
}
答案 5 :(得分:0)
在onCreate()方法中创建我试过这段代码对我有用
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
//CALL ANY METHOD OR ANY URL OR FUNCTION or any view
}
});
}
} catch (InterruptedException e) {
}
}
};t.start();