首先,sendMessage()是Handle的方法,sendToTarget()是Message的方法。
之前讲过,Message的接收一般都是在主线程中new一个Handle变量,重写里面的handleMessage(),在里面写上具体的实现代码,然后在需要发送Message的地方,用new的那个Handle变量的.sendMessage(Message msg)即可,这是常规的做法,下面介绍另一种。
你可能会疑惑,Handle变量用sendMessage()把Message发送出去,再走它内部写好的handleMessage()处理,这很好理解啊,但是sendToTarget()怎么用,它是Message用的方法,发送出去系统怎么知道被哪个Handle接收?接收到后的具体实现代码又写在哪里?其实没有那么玄乎,查看源码会发现,Message类里面,是有一个Handle变量成员的,名称是target,当你调用sendToTarget(),在Message类里会走target.sendMessage(this),也就是说到底这还是用Handle的方法,那么这个target怎么设置?首先,还是在主线程new一个Handle变量handle,重写里面的handleMessage(),然后,当你需要new一个Message的时候,请使用:
Message msg=handle.obtainMessage(int what);
使用这个方法来创建Message,这个Message的target就设置好了,然后就可以放心地使用sendToTarget了~总的来讲这两个方法其实没太大本质差别,但是用sendToTarget()写起来要更规范些。