例如,如果您从此处检查 Message.java 代码,您将看到
//Sends this Message to the Handler specified by getTarget().
public void sendToTarget() {
target.sendMessage(this);
}
换句话说,sendToTarget()
将使用先前指定的Handler
并调用其sendMessage()
如果您寻找该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 实例。允许我们在很多情况下避免分配新对象。
对obtain(Handler h)
:
public static Message obtain(Handler h) {
Message m = obtain();
m.target = h;
return m;
}
您可以确认obtain(Handler h)
确实是 obtain()
添加了设置目标Handler
与 gain() 相同,但在返回的 Message 上设置目标成员的值。
还有其他几个重载,只需检查Message.java并搜索“获取”
obtain(Message orig)
obtain(Handler h, Runnable callback)
obtain(Handler h, int what)
obtain(Handler h, int what, Object obj)
obtain(Handler h, int what, int arg1, int arg2)
obtain(Handler h, int what, int arg1, int arg2, Object obj)
- ...
希望这会有所帮助,干杯!