Handler-Message消息处理机制常见方法

来源:互联网 发布:淘宝助理看不到订单 编辑:程序博客网 时间:2024/06/05 04:16

1:创建消息处理器Handler


Message消息被Handler里面的handlerMessage()方法处理


2:在子线程中给Handler发消息,创建子线程


3:创建消息的方法

3-1:直接实例化Message消息

3-2:从消息池获取消息


obtain():   从全局池中返回一个新消息实例。允许我们在许多情况下避免分配新的对象。

3-3:从消息池获取消息Handler



4:给消息赋值

obj可以赋值所有类型的数据

arg只能赋值整型的数据


5:发送消息的方法

5-1:第一种方法,直接用Handler的sendMessage()方法发送

5-2:当创建消息指定了Handler时,指定Handler可以用obtaion()方法




Message消息被Handler里面的handlerCallback()方法处理

当调用post时


post():使Runnable r添加到消息队列。运行将运行在线程handler中

1:查看源码,发现post()方法调用了sendMessageDelayet()方法,此方法中把Runnable用getPostMessage()方法封装成Message类型


2:源码     在getPostMessage()方法中,将Runnable作为参数传进来,然后直接调用obtain()方法从消息池获取消息,r 最后还是被封装成 Message 。然后给消息 r  设置属性callback。

3:在post方法中,消息Message不会直接调用Handler中的handlerMessage()方法,而是先调用dispatchMessage()方法。

       判断callback,只要你的Message消息中的callback属性不为空,就调用handlerCallback()方法处理。

       如果为空,就调用handlerMessage()方法。

4:源码     当Message消息中的callback属性不为空,就调用handlerCallback()方法处理。

       handlerCallback()是私有的,不能重写,而handlerMessage()可以重写,这也是两者的区别。


post中的Runnable()不是线程了,在handlerCallback中调用了run()方法,只有new Thread(){}.start();才是线程

0 0