Android多线程之间的消息传递是通过Handler来实现的。不同的线程之间又分为两类:即Main Thread(主线程)和Worker Thread(”苦力“线程) 。
Main Thread又称为UI Thread,意思是主线程负责Android App的界面管理与显示和与用户之间的交互,是最重要的也是最核心的Thread,所以我们要对它细心呵护,如果处理不当使UI Thread阻塞,跳出了不友善的窗口,这样是非常影响用户体验的,也是无法容忍的。
而在Andrioid多线程开发中有两点是我们必须要注意的:
1.原则上Worker线程不允许修改UI线程(即主线程)的内容或控件的,但是某些特殊的控件允许被修改,如ProgressBar等。
2.在一个应用程序中,主线程通常用于接收用户的输入,以及将运算的结果反馈给用户,所以说对于一些可能会产生阻塞的操作,如连接远程服务器下载数据信息、复杂的 数据计算等必须放置在Worker Thread中。
Main Thread还是比较好理解的,那么这个Worker Thread又该如何理解呢?相信大家也看到了我上面对它的翻译,即“苦力”线程。我们可以把一个Android App比作一个公司的Project,Thread比作一个单独的Worker,Main Thread就是一个Leader。和用户接洽这种抛头露面的事(UI)和与上级的沟通由Leader来做,苦差事都是由Worker来做,比如跑腿,搬东西,订外卖,取快递,同时不能反对Leader的意思,然后Worker把工作的结果汇报给Leader,Leader进行汇总处理。这样来类比着是不是更好理解呢。
接下来介绍一下我们今天的主角Handler,handle的字面意思是处理、解决,加上er后缀意思大概就是处理事务的东西。
作为一个Android开发菜鸟,时常听到前辈大牛们对Handler是赞不绝口,赞赏Handle设计的精妙,简洁,强大。所以我们有必要了解一下Handler工作机理,和它一起搭配干活的还有和Looper(循环器)以及MessageQueue(消息队列)。俗话说的好,没图你说个J8,哈哈。我已经准备了高清五码给大家呦,走你。
上图就能够很清晰明了的向我们描述Handler的工作流程。椭圆形代表着Handler,长方形代表MessageQueue,而正六边形就是Looper。Handler可以通过obtainMessage()方法创建许多个消息Message,然后把Message发送到MessageQueue中,(在这里提一句,MessageQueue是一个队列,有先进先出(FIFO)的特性,相信学过数据结构的小伙伴都不