- 若是进程中没有四大组件,其优先级将会下降,intentservice 是service封装了handerthread ,这是intentservice的优势
- 线程是操做系统的最小调度单元,是系统的一种受限制的系统资源,建立和销毁线程都将有对应的开销,因此使用线程池来避免这种开销
- Android中的线程形态: AsyncTask 、HandlerThread、IntentService
- 线程池的优势:避免线程建立销毁的开销、控制线程池的最大并发数,避免抢占资源致使的阻塞、简单的线程管理功能,好比定时执行等功能
- ThreadPoolExecutor: corePoolSize 核心线程数,即便闲置也将存活,allowCoreThreadTimeout 为true将会在闲置的时候有一个超时,keepAliveTime 就是这个超时时间
- ThreadPoolExecutor:maximumPoolSize 这个线程池所能容纳的最大的线程数,当活动线程数达到这个数值的时候新的任务将会阻塞
- ThreadPoolExecutor:keepAliveTime 非核心线程闲置时的超时时长,当allowCoreThreadTimeout为true的时候这个值一样用于核心线程
- ThreadPoolExecutor:unit制定keepalivetime的时间单位
- ThreadPoolExecutor:workQueue线程池中的任务队列,经过线程池的execute方法提交的runnable对象将会存储在这个参数中
- Threadpoolexecutor:threadfactory,为线程池提供建立新线程的功能
- ThreadPoolExecutor:执行流程,
(1)先比较corepoolsize 若是运行中的线程数少于这个数,直接启动核心线程运行任务
(2)若是核心线程运行已经满负荷,将会把任务添加到workqueue中
(3)若是workqueue满了,就启动非核心线程执行任务
(4)若是(3)中的线程数量已经大于maximun就reject会调用rejectExecptionHandler
- AsyncTask的corepoolsize= cpuconnt+1,maximunpoolsize = cpucount x2 + 1,keepalivetime = 1s, workqueue size = 128
四种线程池
1 fixedthreadpool 只有核心线程 corepoolsize = maximumpoolsize keepalivetime =0 workqueuesize无限制
能够更快的响应外界的请求
2 cachedthreadpool corepoolsize = 0, maximumpoolsize=integer.maxvalue ,keepalivetime = 60s 当全部线程都处于运行状态,将会启动新的线程来作事情,不然使用空闲的线程来作事情,当一个线程闲置超过60s就会被回收,因此若是这个threadpool 闲置时几乎不占系统资源
3 schedulethreadpool corepoolsize 是固定的,maximumpoolsize= integer.maxvalue 主要用于执行定时任务,和具备固定周期的任务,并发
4 siglethreadpool corepoolsize=maximumpoolsize=1 keepalivetime=0,workqueuesize 没有限制 单线程执行操作系统