一.种类:
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