Handler消息处理机制

刚开始接触android,边学习边做笔记,希望大家多指正。

       经常在代码中看到sendMessage()族的一些函数,开始时总搞不明白消息发送到哪里去了,谁去处理,什么时候处理。下面是问题解答。

       android中有几个概念:消息Message、消息队列MessageQueue、Looper对象。在创建Looper对象(构造函数中)时,会相应产生一个消息队列;sendMessage()函数会将消息放入到该函数所在线程对应的Looper的消息队列中(一个线程最多有一个Looper),Looper会不断地从消息队列中取出消息并处理,处理消息的实现在handleMessage(Message msg)中;那handleMessage函数去哪里看呢?首先找到sendMessage或是post函数族的发出者Handler,如myHandler.sendMessage(XX),那么我们需要找到myHandler的类型,假设为SHandler类,那么就去SHandler类中寻找handleMessage方法。因此在编写程序时,我们创建的handler类在继承Handler的同时,需要重写Handler的handleMessage方法。

       至于开始的几个疑问,我是这样理解的。消息发送出去,就相当于马上要被处理了。就像进地铁一样,已经站到了进站的队列中(假设每个地铁站仅一个地铁口和进站队列),地铁口的工作人员一直处于工作状态,类似于这里的Looper,不同的地铁站类似于不同的Handler对象,它们均有自己的工作人员Looper和进站队列MessageQueue。


Handler myhandler=new Handler(){
    @Override
    public void HandleMessage(Message msg)
    {
        super.HandleMessage(msg);
        switch(msg.what){
            case 0:
                fun();
                break;
            default:
                break;
        }
    }
}
private void sendMessageDemo(){
    new Thread(new Runnable(){
        @Override
        public void run(){
            Message msg=handler.obtainMessage();
            myHandler.sendMessage(msg);
            }
    }).start();
}

private void postDemo(){
    new Thread(newRunnable(){
        @Override
        public void run(){
            myHandler.post(new Runnable(){
                @Override
                public void run(){
                    fun();
                }
            });
        }
    }).start();
}




向消息队列中发送消息的方法有:

sendEmptyMessage(int)//发送消息

sendMessage(Msg)

sendMessageAtTime(Msg,long)

sendMessageDelayed(Msg,long)

post(Runnable)//提交计划任务

postAtTime(Runnable,long)

postDelayed(Runnable,long)

其中,sendMessage族和post族区别仅在于编码实现的方式不同,而原理的本质是一样的。









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值