安卓handler

    本文深入探讨Android中用于更新UI和传递处理消息的Handler机制,包括其原理、使用方式以及为何只能通过Handler更新UI的原因。通过具体实例演示Handler的实现与应用,旨在帮助开发者掌握这一关键概念。

    摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    handler是一种更新UI,传递处理消息的机制.
    因为在非主线程之中不可以直接更新UI,所以需要handler


    机制.
    handler使用的小例子:
    首先在activity类中实例化一个handler:
    private Handler handler=new Handler(){
    public void handleMessage(){
    //在这里覆盖该方法.实现你要处理消息的代码
    }
    }


    然后,在非主线程传递消息,例如:
    new Thread(){
    public void run(){
    //在这里传递消息:
    Message me=new Message();
    me.obj=某个对象;//假设对象为我们要传递的消



    handler.sendMessage(me);
    }
    }


    好的,上述代码已经可以基本实现handler的用法.
    但是,我们还可以有点变化.
    例如,在非主线程传递消息的代码可以为如下:
    Message me=handler.obtainMessage();
    me.obj=某个对象;
    me.sendtoTarget();
    上述代码,解释一下:handler.obtainMessage()方法是获


    取默认的Message对象;.
    me.sendtoTarget()方法是发送消息到绑定的handler对象


    ,作用相当于上文的handler.sendMessage()方法.






    另外,在实例化handler对象时候.可以如下:
    Handler handler=new Handler(new CallBack(){


    public Boolean handleMessage(){

    //这个方法跟下面的方法一样是处理消息的.但


    是,这个方法有截获消息的作用.如果将返回值设置为


    true,则可以使得下面的handleMessage不会执行.
    }
    }){
    public void handleMessage(){

    }
    };




    安卓为什么设计成只能通过handler来更新UI?
    主要是多线


    程并发的问题,假如多个线程共同更新UI,则会发生混乱


    。那么为了处理混乱,我们不妨假设加上一把锁,这样子


    ,多线程并发可以执行了,但是由于锁的缘故,效率降低


    ,所以为了兼顾上述两者,安卓规定非主线程不可以更新


    UI,只能通过handler




    handler的原理是什么?
    handler首先发送消息,其实消息


    是发送到messagequeue当中,messagequeue是一个存储消


    息的队
    列,然后会有个叫做looper的对象调用looper方法


    来不断的从messagequeue当中取出消息,假如有消息,则


    会发回给handler,handler自身会处理消息。假如没有消


    息存在,那么looper会将自身阻塞

    登录后您可以享受以下权益:

    ×
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回顶部