在某些时候,我希望我的服务在2秒后执行一些事情。所以,我准备了一个指定的Handler:
private Handler handler;
...
HandlerThread thread = new HandlerThread("LNT");
thread.start();
handler = new Handler(thread.getLooper());
然后我调用
handle.postDelayed (new Runnable(){
public void run(){
doSomething();
}, (long)(2000));
有时soSomething()在2秒后被调用,但很多时候需要15秒!!
我做错了什么?有没有别的方法在一段特定的时间后运行一些东西
您可能需要在主循环程序上执行您的工作。所以,为什么不这样做呢:
new Handler(context.getMainLooper()).postDelayed(new Runnable(){
@Override
public void run(){
doSomething();
}
}, 2000);
测试一下,给我你的反馈;)
您的Handler可以忙于其他任务。有时候用ExecutorService
比较好,比如Executors.newCachedThreadPool()
。至少,这就是我刚才解决类似问题的方法。
你可以这样做
private static final byte LNT = 1;
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case LNT:
Handler handler = null;
handler = new Handler();
handler.postDelayed(new Runnable()
{
public void run()
{
doSomething();
}
},2000);
break;
default:
break;
}
}
}
用
handler.sendEmptyMessage(LNT);