Android Handler的一些理解

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提供给上层,根据消息去完成需要完成的任务。

猜你喜欢

转载自blog.csdn.net/weixin_31706797/article/details/80306325
今日推荐