前言:
android中的app是由java编写的,因此android中很多机制也就是java中的机制,而今天我们要讲的handler机制是一种android中实现的特有机制。
简单的说,handler是一个线程池(更多关于java中线程池的知识,请参考我的博文:Java中的线程机制)。
正文:
一、首先我们来讲一个概念:Message(消息)
所谓消息,就是handler机制中通信的介质。当我们需要发送一个消息时,就需要有一个Message对象,而这个对象我们不需要自己创建,只要调用Handler类提供的obtainMessage方法,就能得到一个消息,我们可以设置这个消息的属性,让其携带我们指定的信息,最后通过调用sendtotarget方法即可发送出去。
那么,为什么我们不自己创建一个Message对象呢,我们自己new的消息和通过obtainMessage获得的消息有什么区别呢?
简单的解析一下:每一个Message对象都有一个target,即这个消息是用于发送到哪里的,也就是目标handler。如果new一个Message对象,就必须使用handler.sendmessage(msg)方法把消息发送到的相应的handler;而obtain方式会自动将Message对象的target设置为当前handler,因此直接sendtotarget即可。另外,handler中有一个消息池,所有用过的Message对象并没有立即回收,而是放在这个消息池中,使用obtain方式会从池中取出一个来用,避免重复的申请释放内存操作,性能更高校一些。因此我们一般都会采用obtain方式。