Android 中除了 Thread 之外能扮演线程的角色有很多如:AsyncTask 和 IntentService, HandlerThread
AsyncTask
底层用到了线程池,而 IntentService
和 HandlerThread
底层则直接调用了线程。
AsyncTask
封装了线程池和 Handler
,其主要是为了开发者在子线程中更新 UI ;
HandlerThread
是一种具有消息循环的线程,在它的内部可以使用 Handler;
IntentService
是一个服务,系统对其进行封装,使其可以更方便的执行后台任务 IntentService 内部使用了 HandlerThread 来执行任务,当任务执行完成之后 IntentService 会自动退出。
从任务执行的角度来看, IntentService 更像是一种后台线程,但是 IntentService 又是一种服务,它不容易被系统杀死,所以可以保证任务能够一直执行。而如果只是后台进程,那么这个进程的优先级就会非常低,很容易被后台杀死。
在操作系统中,线程是操作系统调度的最小的单元
,同时线程又是一种受限制的系统资源,即线程是不可能无限制的产生,并且线程的创建和销毁都会有相应的开销,所以在 Android 中为了避免线程的无限创建,因此有了线程池的概念,主要是通过 Executor
来派生特定类型的线程池,不同种类的线程池又具有各自的特性。
Android AysncTask 从源码角度简单理解它的使用限制原因
Android IntentService 从源码角度分析和简单使用
参考
《Android开发艺术探索》