在postDelayed延迟后很长时间执行Runnable

时间:2014-05-29 14:29:28

标签: android runnable timing android-handler

在某些时候,我希望我的服务在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秒!!

我做错了什么? 是否有其他方式在特定时间段后运行某些东西

3 个答案:

答案 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);