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