boolean enqueueMessage(Message msg, long when) {
if (msg.target == null) {
throw new IllegalArgumentException("Message must have a target.");
}
synchronized (this) {
//when 是传过来的时间 when里面有加上系统时间
msg.when = when;
//mMessages 只是有对象 但是里面的参数都是空
Message p = mMessages;
boolean needWake;
这里if判断 p == 0成立
if (p == null || when == 0 || when < p.when) {
// New head, wake up the event queue if blocked.
msg.next 是Message对象
这里p == null
msg.next = p;
这里mMessages被赋值为msg1
mMessages = msg;
} else {
// Inserted within the middle of the queue. Usually we don't have to wake
// up the event queue unless there is a barrier at the head of the queue
// and the message is the earliest asynchronous message in the queue.
needWake = mBlocked && p.target == null && msg.isAsynchronous();
Message prev;
for (;;) {
prev = p;
p = p.next;
if (p == null || when < p.when) {
break;
}
if (needWake && p.isAsynchronous()) {
needWake = false;
}
}
msg.next = p; // invariant: p == prev.next
prev.next = msg;
}
// We can assume mPtr != 0 because mQuitting is false.
if (needWake) {
nativeWake(mPtr);
}
}
return true;
}
接下来看第二条消息,msg用msg2命名
boolean enqueueMessage(Message msg, long when) {
if (msg.target == null) {
throw new IllegalArgumentException("Message must have a target.");
}
synchronized (this) {
//when上面是1000
msg.when = when;
//第一条消息mMessages是msg1,p = msg1
Message p = mMessages;
//这里if判断 p = msg1 不成立 || when !=0 || when < p.when 这里是大于 因为when是1000 p.when是0
if (p == null || when == 0 || when < p.when) {
// New head, wake up the event queue if blocked.
msg.next 是Message对象
这里p == null
msg.next = p;
这里mMessages被赋值为msg1
mMessages = msg;
} else {
Message prev;
//死循环
for (;;) {
//p是msg1 prev是msg1
prev = p;
//根据第一条消息得出 p.next是空 p这里变成了null
p = p.next;
//p==null成立 跳出循环
if (p == null || when < p.when) {
break;
}
if (needWake && p.isAsynchronous()) {
needWake = false;
}
}
这里msg2.next = null
msg.next = p; // invariant: p == prev.next
这里prev是msg1 ,所以msg1.next = msg2
prev.next = msg;
}
// We can assume mPtr != 0 because mQuitting is false.
if (needWake) {
nativeWake(mPtr);
}
}
return true;
}
最后看看第三条过来的消息,msg用msg3命名,最后得到这里msg3和msg2对调了位置。
boolean enqueueMessage(Message msg, long when) {
if (msg.target == null) {
throw new IllegalArgumentException("Message must have a target.");
}
synchronized (this) {
//when==500
msg.when = when;
/mMessages是msg1
Message p = mMessages;
//p!=null
if (p == null || when == 0 || when < p.when) {
// New head, wake up the event queue if blocked.
// msg.next 是Message对象
这里p == null
msg.next = p;
这里mMessages被赋值为msg1
mMessages = msg;
} else {
Message prev;
for (;;) {
//p是msg1 prev是msg1
prev = p;
//p是msg1 msg1.next是msg2 由上一个判断得出
p = p.next;
//p!=null
if (p == null || when < p.when) {
break;
}
if (needWake && p.isAsynchronous()) {
needWake = false;
}
}
//msg.next= msg2
msg.next = p; // invariant: p == prev.next
//msg1.next =msg3
prev.next = msg;
}
// We can assume mPtr != 0 because mQuitting is false.
if (needWake) {
nativeWake(mPtr);
}
}
return true;
}
mLooper = Looper.myLooper();
if (mLooper == null) {
throw new RuntimeException(
"Can't create handler inside thread that has not called Looper.prepare()");
}