可运行在延迟延迟后很长时间内执行



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

最新更新