handler是如何保证延迟消息的实现?
如果发送过来的message有延迟参数when>0,那么会和现在的时间进行相减,得出一个值,这只休眠唤醒机制,在n秒之后唤醒,继续执行。
handler post和send两种发送消息的方式有何不同?如何取舍。
post发送一个runnable对象,这个对象会被Message对象的callback字段所引用,最后这个message对象会被添加进消息队列,这样就和正常的消息一样最后被looper取出,交给handler处理。
主线程的LOOP可以通过quit()退出吗?为什么?
主线程在创建LOOP的时候在构造方法中传递了一个参数mQuitAllowed,mQuitAllowed这个参数为false决定了这个LOOP是不可以退出的,我们在其他线程创建的时候也可以选择这个参数,默认是true ,可以退出的。
Loop的quitSafely()方法和quit()方法的区别:
quit()方法是会清空现在消息池中的所有消息,而quitSafely()方法则会将延迟的消息全部清楚,非延迟的消息会配发到handler执行。这两个方法执行之后,Loop消息循环就终止了,继续发送消息会失败。
Message的复用机制
Message被handler处理之后会被加入到回收池中,这个池子是一个最大大小为50的链表。