Android Handler的一些理解

本文深入探讨了Android系统中Handler的工作原理及其与Looper、MessageQueue之间的关系。解释了如何利用Handler来处理消息,维持UI更新及数据库操作等任务。

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

Android Handler相信做过android开发的人都不会太陌生,也许很多人不知道它内部的运行原理,但是至少都用过它来传递消息。

对于Handler的最初使用,我也只是将它作为一个参数,用它来传递消息,更新我所要更新的UI及数据库,而至于其内部运行原理,因为没有工作的需求,也就没有去做研究。

最近闲来无事,就看了些源码,并读了一些大神写的博客,对于Handler有了更深层的认识。

Android系统是一个以消息为驱动的系统,而消息的循环处理是通过Handler,Looper和MessageQuene来实现的,我们创建一个Activity的时候,默认的就会为我们创建这整套的Handler,Looper,MessageQuene,Activity通过将Message放到MessageQuene,再由Looper循环取出交给Handler来进行分发处理,如系统中的点击触摸事件,都会转化为消息,交给主线程的mH(Handler子类)去做分发处理。

对于Handler和Looper,MessageQuene的关系,通过看相关源码知道,Looper与MessageQuene及线程之间是双向一对一的绑定的,这就是为什么我们不能在UI主线程中执行Looper.prepare()方法,因为执行该方法会发现,该线程已经绑定了Looper,而MessageQuene作为Looper的全局变量,也只存在一份。而Handler与Looper却是多对一的关系,一个Looper可以对应多个Handler,就像我们在Activity里面可以随意的创建多个Handler。

小结

Handler消息处理的整个流程可以分为三个部分,

1. 需要一个Thread来作为内动力去驱动这个消息机制(Looper所绑定的thread)。

2. 需要Looper及MessageQuene来存取消息,形成一个循环,保证事物处理顺畅的运转。

3. 需要一个Handler提供给上层,根据消息去完成需要完成的任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值