第11章 Android的线程和线程池

1.主线程和子线程

11.2Android中的线程形态

11.2.1 AsyncTask

AsyncTask 是一个抽象的泛型类,他提供了Params,Progress和Result三个泛型参数
Async提供了4个核心方法
1.onPreExecute() 2.doInbackGround() 3.onProgressUpdate() 4.onPostExecute

11.2.2AsyncTask的工作原理

11.2.3 HandlerThread

HandlerThread继承了Thread,他是一个可以使用handler的Thread
在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环。这就在实际实际使用中允许在handlerThread中创建handler。

11.2.4IntentService intentService是一种特殊的Service,它继承了Service并且他是一个抽象类,所以必须创建它的子类才能使用IntentService。IntentService可用于执行后台耗时的任务,当任务执行后他自动停止。在实现上IntentService封装了handlerThread和handler

当intentService被第一次启动时,他的increase方法会被调用,onCreate方法会创建一个handlerThread,然后使用它的Looper来构造一个Handler对象mServiceHandler,这样通过mServicehandler发送的消息最终都会在HandlerThread中执行,从这个角度来说,IntentService也可以用于执行后台任务。每次启动intentService,它的onStartCommend方法就会调用一次。IntentService仅仅是通过mServiceHandler发送一个消息,这个消息在handlerThread中被处理。mServiceHandler收到消息后,会将Intent对象传递给OnhandlerIntent方法去处理

11.3 Android中的线程池

好处
1.重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销
2.能有效控制线程池中的最大并发数,避免大量的线程之间因为互相抢占系统资源而导致的阻塞现象
3.能够对线程进行简单的管理,并提供定时执行以及制定间隔循环执行等功能

11.3.1 ThreadPoolExecutor

threadPoolExecutor是线程池真正实现,他的构造方法提供了一系列参数来配置线程池

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue workQueue,ThreadFactory threadFactory)

corePoolSize 线程的核心线程数
maximumPoolSize 线程池所能容纳的最大线程数
keepAliveTime 非核心线程闲置时的超时时长
unit 用来是定keepAliveTime参数的时间单位
workQueue 线程池中的任务队列
threadFactory 线程工厂,为线程池提供新线程的功能

11.3.2线程池分类

1.FixedThreadPool 线程数量固定的线程池,当线程处于空闲状态时,他们并不会被回收
2.CachedThreadPool 他是一种线程数量不定的线程池,他只有非核心线程,最大线程数量是Integer.MAX_VALUE
3.ScheduledThreadPool 他的核心线程数量是固定的,而非核心线程数是没有限制的。并且当非非核心线程闲置时会被立刻回收。ScheduledThreadPool这类线程池主要用于执行定时任务和具有固定周期的重复任务
4.singleThreadExecutor 内部只有一个核心线程,他确保所有的任务都在用一个线程中按顺序执行。

你可能感兴趣的:(第11章 Android的线程和线程池)