查Message的代码,的确是有几个obtain函数。
但是查handler代码,发现这几个函数的调用是这个函数调用的
public final Message obtainMessage()
{
return Message.obtain(this);
}
也就是说必须手动得到Message的时候才会通过这个函数传参赋值。
那么sendEmptyMessage的时候target又是在哪赋值呢?
我们可以看到sendEmptyMessage的调用顺序是
sendEmptyMessage->sendEmptyMessageDelayed(这时会调用Message.obtain()但注意不会赋值target)->sendMessageDelayed->sendMessageAtTime->enqueueMessage
在enqueueMessage中会有msg.target = this;
这时才赋值了。
但是查handler代码,发现这几个函数的调用是这个函数调用的
public final Message obtainMessage()
{
return Message.obtain(this);
}
也就是说必须手动得到Message的时候才会通过这个函数传参赋值。
那么sendEmptyMessage的时候target又是在哪赋值呢?
我们可以看到sendEmptyMessage的调用顺序是
sendEmptyMessage->sendEmptyMessageDelayed(这时会调用Message.obtain()但注意不会赋值target)->sendMessageDelayed->sendMessageAtTime->enqueueMessage
在enqueueMessage中会有msg.target = this;
这时才赋值了。