Handler,Looper以及HandlerThread的解析
1.前言
之前在工作过程中,都是以写笔记的形式,记录一些开发中遇到的问题,以及平时学习的心德和成果。后来发现,写给自己看的笔记大多过于简洁,或者排版不雅观,导致再次去复习巩固的时候,可阅读性较差。也没法和大家一起共享和探讨到我写的内容,所以决定用订阅号的形式去改进一下自己的学习记录的方式,博客以及GitHub也会相应同步。希望大家多多支持。今天要分析的是在开发中或是在面试中非常常用也非常重要的Handler.以及和它相关的Looper,它俩的关系,以及HandlerThread的分析。
2.概述
就应用程序而言,Android系统中的Java的应用程序和其他系统上相同,都是靠消息驱动来工作的,它们大致的工作原理如下:
-
有一个消息队列,可以往这个消息队列中投递消息。
-
有一个消息循环,不断从消息队列中取出消息,然后处理。
我们可以用下面这个图来展示这个工作过程:
从图中可以看出:
1.事件源把待处理的消息加入到消息队列中,一般是加至队列尾部,一些优先级高的消息也可以加至队列头,事件源提交的消息可以是按键,触摸屏等物理事件产生的消息,也可以是系统或应用程序本身发出的请求消息。
2.处理线程不断从消息队列头中取出消息并处理,事件源可以把优先级高的消息放到队列头,这样,优先级高的消息就会首先被处理。
在Android系统中,这些工作主要就是由Looper和Handler来实现的。
3.Looper分析
首先我们先看一下Looper的源码: