通常来说,一个线程需要经历三个生命阶段:开始,执行,结束。线程会在任务执行完毕之后结束,那么为了确保线程的存活,我们会在执行阶段给线程赋予不同的任务,然后在里面添加退出的条件从而确保任务能够执行完毕后退出。

Understanding Android Threading. (Android Performance Patterns Season 5, Ep. 2)_Android

在很多时候,线程不仅仅是线性执行一系列的任务就结束那么简单的,我们会需要增加一个任务队列,让线程不断的从任务队列中获取任务去进行执行,另外我们还可能在线程执行的任务过程中与其他的线程进行协作。如果这些细节都交给我们自己来处理,这将会是件极其繁琐又容易出错的事情。

Understanding Android Threading. (Android Performance Patterns Season 5, Ep. 2)_模型_02

所幸的是,Android系统为我们提供了Looper,Handler,MessageQueue来帮助实现上面的线程任务模型:

Looper: 能够确保线程持续存活并且可以不断的从任务队列中获取任务并进行执行。

Understanding Android Threading. (Android Performance Patterns Season 5, Ep. 2)_Android_03

Handler: 能够帮助实现队列任务的管理,不仅仅能够把任务插入到队列的头部,尾部,还可以按照一定的时间延迟来确保任务从队列中能够来得及被取消掉。

Understanding Android Threading. (Android Performance Patterns Season 5, Ep. 2)_模型_04

MessageQueue: 使用Intent,Message,Runnable作为任务的载体在不同的线程之间进行传递。

Understanding Android Threading. (Android Performance Patterns Season 5, Ep. 2)_Android_05

把上面三个组件打包到一起进行协作,这就是HandlerThread

Understanding Android Threading. (Android Performance Patterns Season 5, Ep. 2)_模型_06

我们知道,当程序被启动,系统会帮忙创建进程以及相应的主线程,而这个主线程其实就是一个HandlerThread。这个主线程会需要处理系统事件,输入事件,系统回调的任务,UI绘制等等任务,为了避免主线程任务过重,我们就会需要不断的开启新的工作线程来处理那些子任务。

转载:http://hukai.me/android-performance-patterns-season-5/