为了不让帖子沉下去,Up by myself...

解决方案 »

  1.   

    那就是说post的线程和send的消息都是发送到一个队列里的喽?也就是post方法调用后在handleMessage方法也会被执行的?
      

  2.   

    刚刚看了一下源码,发现post和sendMessage其实都是发送到一个消息队列里去的,因为都是调用的sendMessageDelay方法,只不过post调用sendMessageDelay方法的时候传的参数为getPostMessage(r)而已。而且在第一次调用post方法后的确执行了handleMessage方法,但是却没有执行run方法,如果在handleMessage方法中再调用post方法后能执行一次run方法,但是好像post却没有再往消息队列中发送消息,因为后面就不再执行handleMessage方法了,也就不会一直这样反复下去了……为什么呢?
      

  3.   

    我也想知道。。 而且我还想知道handleMessage的调用规则。。 是在有sendMessage之类的方法被调用后Handler就会自动调用handleMessage吗? 那如果我在handleMessage中调用sendMessage方法是不是就成为一个递归了?
      

  4.   

    handleMessage()里面调用sendMessage()应该会报错吧,有没有试过?
      

  5.   

    1. 一个Handler只有一个队列;
    2. 在调用Handler.post(Runnable runnable)方法时,会将runnable封装成一个Message;
    3. 在队列执行时,会判断当前的Message里是否封装了Runnable,如果封闭了,就直接执行Runnable,如果没有,将当前的Message传递给handleMessage(Message msg)处理;
    4. Handler在实例化的时候可以设置一个callback<Handler.Callback>,callback也有一个handleMessage(Message msg)方法,如果步骤3中的Handler有callback,那么调用的是callback的handleMessage(Message msg),否则调用自身的handleMessage(Message msg)。
      

  6.   

    也就是说,想产生递归效果,是要在Runnable里post(Runnable runnable),或者在handleMessage()里sendMessage(),交错调用就会断片。