Android中常用的多线程机制主要有以下几个:new Thread(), AsyncTask, Handler Thread, Intent Service 还有线程池。
new Thread(): 在阿里开发手册中明确禁止使用这种方式开启新线程,主要是因为新线程这样开启之后无法主动停止,只适合执行耗时短的轻量级任务
AsyncTask: 适合执行轻量级耗时短任务,它的实例必须在主线程中创建,内部实现是Handler+线程池(默认串行)。但是个人感觉在实际开发中AsyncTask实现比较繁琐,代码可读性差,有一定经验的程序员可以适当地使用new Thread()方式提高开发效率。
Handler Thread: 使用这种方式开启的线程可以长时间运行,不断地从任务队列中获取任务。它是Thread的子类,内部实现是Handler+Thread,它的任务队列是一个串行队列,不适合执行耗时太多的任务,比如网络请求,如果一个请求卡住了,后面的任务都会延迟。
Intent Service:适合执行耗时任务,它本质上是一个Service,但是优先级比一般Service高,在后台不易被杀死,执行完任务后会自动退出。它是Service的子类,内部实现是Handler+HandlerThread。
线程池:适合需要频繁创建和销毁的多线程任务
网友评论