- 如果进程中没有四大组件,其优先级将会降低,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 没有限制 单线程执行