处理程序sendMessageDelayed仅在第一次运行

问题描述:

我遇到处理程序问题。它仅在第一次实例化时正常工作。处理程序sendMessageDelayed仅在第一次运行

的处理程序是一个视图中:

private long delayMillis; 
    private long mMoveDelay = 1000; 

    /** 
    * Create a simple handler that we can use to cause animation to happen. We 
    * set ourselves as a target and we can use the sleep() 
    * function to cause an update/invalidate to occur at a later date. 
    */ 
    private RefreshHandler mRedrawHandler; 


    class RefreshHandler extends Handler { 

     // serve per far vedere tile 2 almeno un tempo prestabilito checkTime 

     @Override 
     public void handleMessage(Message msg) { 


      delayMillis+=mMoveDelay; 
      System.out.println("--->handleMessage mMoveDelay"+10000); 
      System.out.println("--->handleMessage delayMillis"+delayMillis); 


      sleep(); 
     } 

     public void sleep() { 

      //this.removeMessages(0); 
      sendMessageDelayed(obtainMessage(0), mMoveDelay); 
      System.out.println("--->sleep delayMillis"+delayMillis); 
     } 
    }; 

了几次后,我跑

mRedrawHandler = new RefreshHandler(); 
    mRedrawHandler.sleep(); 

sendMessageDelayed瞬间调用。这个问题似乎在这个岗位相似:

Handler.sendMessageDelayed(msg, delay) not working correctly

你有什么想法? 谢谢

+1

我解决了只执行一次新的RefreshHandler()。 – Gyonder 2013-04-11 14:18:21

在sleep方法中,获取消息(0)的对象是什么? 这似乎是问题所在。您不能使用上次使用的消息对象。你必须创建新的消息对象。