我想在我的应用中每隔几秒做一些事情,为此,我实施了HandlerThread
& handler
通过以下代码
handlerThread = new HandlerThread(getClass().getSimpleName());
handlerThread.start();
handler = new Handler(handlerThread.getLooper(), new Callback() {
@Override
public boolean handleMessage(Message msg) {
//my code here
return l.this.handleMessage(msg);
}
});
我通过发送来自onCreate()
我按如下方式处理消息:
private boolean handleMessage(Message msg) {
switch (msg.what) {
default:
return false;
case MY_MESSAGE:
if(handler_stop==0)
{
checkLauncher();
sendMessage(MY_MESSAGE); // I Send the message from here to make //this continuous
}
}
return true;
}
它工作正常,但它发送的信息太快,我的意思是不断,而是我希望这个消息在2或3秒后发送,简而言之,我想每2-3秒重复一次任务。
我如何在上面的代码上执行此操作?请一些帮助
答案 0 :(得分:9)
首先为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);// change the time according to your need
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();
否则只需在代码中添加:
handler.postDelayed(new Runnable(){
public void run() {
// do something
}}, 20000);
答案 1 :(得分:1)
为什么不使用Handler.sendMessageDelayed?它允许您安排将消息传递给处理程序,并指定延迟。所以你的代码看起来像这样:
private boolean handleMessage(Message msg) {
switch (msg.what) {
default:
return false;
case MY_MESSAGE:
if(handler_stop == 0) {
checkLauncher();
sendMessageDelayed(MY_MESSAGE, 2000); // Send message everytime with 2 seconds delay
}
}
return true;
}
答案 2 :(得分:0)
嗨,我有一个简单的方法来做到这一点 试试这个
Runnable runnable;
final Handler handler = new Handler();
runnable = new Runnable() {
public void run() {
// HERE I AM CHANGING BACKGROUND YOU CAN DO WHATEVER YOU WANT
_images[i].setBackgroundResource(imageArray[0]);
i++;
handler.postDelayed(this, 1000); // for interval...
}
};
handler.postDelayed(runnable, 1000); // for initial delay..
为我工作希望你也会发现它有效
感谢
如果找到有用的话,投票。