在某些时候,我希望我的服务在2秒后执行某些操作。 所以 - 我准备了一个指定的处理程序:
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秒!!
我做错了什么? 是否有其他方式在特定时间段后运行某些东西
答案 0 :(得分:0)
您可能需要在Main Looper上执行您的工作。 Soooo,为什么不这样做:
new Handler(context.getMainLooper()).postDelayed(new Runnable(){
@Override
public void run(){
doSomething();
}
}, 2000);
只是测试它并给我你的反馈意见;)
答案 1 :(得分:0)
您的处理程序可能正忙于执行其他任务。有时候使用ExecutorService
会更好,就像使用Executors.newCachedThreadPool()
一样。或者无论如何,这就是我如何解决类似的问题。
答案 2 :(得分:-1)
你可以这样做
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);