Android Handler运行原理

         在Android开发中,主线程的主要任务是监听事件和绘制界面,如果处理一些费时的操作如下载图片等就会阻塞主线程(也称为UI线程),常用的做法是耗时操作放到另一个线程中去,完成后通知UI线程去更新界面,这样任务分的更清晰:UI线程负责UI处理,子线程负责网络下载,其中子线程通知主线程一般都是用Handler来完成,可Handler是怎么做到的呢?

        首页在UI线程启动时,系统自动调用了二行代码1.Looper.prepare(); 2.Looper.loop();其中1是为UI线程建一个Looper的线程变量,2是一直循环这个Looper中的MessageQueue中的Message,如果有则调用改善此Message的Handler中的dispatchMessage();方法来处理此消息.

       在我们new Handler()时,系统会将我们新建这个Handler的线程(这里为UI线程,如果我们自己的线程没调用Looper.prepare()则会出错)中的Looper对象和对应的MesssageQueue引用给此Handler。

       当我们在新的线程中调用Handler.sendMessage(Message msg)时,Handler会将此消息放到MessageQueue中,同时将msg.target设置成发送消息的Handler。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值