一.种类:

1.Handler或者HandlerThread;

2.AsyncTask;

3.IntentService;

4.线程池;

5.CursorLoader;

6.携程;

二.具体介绍:

三.优缺点比较:

1.handler

(1)优点:

(2)缺点:容易出现内存泄漏的问题(Message Queue默认引用handler,handler默认引用activity,如果Message Queue里面的消息没有处理完的时候,Activity是无法进行销毁的,会出现内存泄漏的问题。通过将handle设置为静态内部类能解决内存泄漏的问题,但是就无法引用内部成员变量)。

2.handlerThread

(1)优点:使用灵活;主线程、工作线程均可实现自己的handle机制。

(2)缺点:一般在Activity里面使用,Activity挂了,那么它就会跟着一起挂。

3.AsyncTask

(1)优点:封装好的工具类,使用起来比较方便。

(2)缺点:不够灵活,只能在主线程进行创建;只能被执行一次,多次调用会发生异常。

4.IntentService

(1)优点:不受Activity生命周期的影响;可以在后台运行;优先级比较高,适合执行高优先级的后台任务,不容易被杀死。

(2)缺点:多个任务只能依次执行,不能并行执行。

5.线程池

(1)优点:

降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗;

提高响应速度:当任务到达时,任务可以不需要的等到线程创建就能立即执行;

提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控;

(2)缺点:适用于生存周期较短的的任务,不适用于又长又大的任务;不能对于线程池中任务设置优先级;不能标识线程的各个状态,比如启动线程,终止线程。

四.适用场景:

1.Handler和HandlerThread:适用于循环、多次执行后台耗时任务

2.AsyncTask:适用于单次执行后台耗时任务并刷新UI

3.IntentService:适用于后台执行高优先级任务

4.线程池:适用于多后台任务并行执行

5.CursorLoader:适用于列表展示数据库信息的场景

6.协程:适用于多任务异步执行后刷新UI