看下Handler的postDelayed方法:
public final boolean postDelayed(Runnable r, long delayMillis){
return sendMessageDelayed(getPostMessage(r), delayMillis);
}跟踪看下getPostMessage的方法:
private static Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback = r;
return m;
}跟踪看下Message的obtain方法:
public static Message obtain() {
synchronized (sPoolSync) {
if (sPool != null) {
Message m = sPool;
sPool = m.next;
m.next = null;
m.flags = 0; // clear in-use flag
sPoolSize--;
return m;
}
}
return new Message();
}看下Message的构造方法:
public Message() {
}跟踪到这里发现一直没有给Message指定what值,即通过Handler的postDelayed方法send的Message的what值使用的是int型的默认值0。
故当使用Handler时,如果removeMessages的what值是0,则postDelayed的Message也被移除了。
所以,使用Handler时,what值不能从0开始。切记!切记!
Handler机制解析
本文深入剖析了Android中Handler机制的工作原理,特别是postDelayed方法的具体实现过程。文章详细解释了如何通过Handler发送延迟消息,并强调了在使用removeMessages方法时需要注意Message的what值不能为0这一关键细节。
479

被折叠的 条评论
为什么被折叠?



