Android的线程和线程池
来源:互联网 发布:如何设计软件 编辑:程序博客网 时间:2024/06/07 01:33
一、Android中的线程形态
1、Thread:在run方法中执行耗时任务
2、AsyncTask:
1)、封装了Thread和Handler,用于执行后台任务并在主线程中访问UI,不适合特别耗时的后台任务。
2)、提供了3个泛型参数:Params表示参数类型、Progress表示后台任务执行进度的类型、Result表示后台任务返回结果的类型
3)、提供了4个核心方法:
a、onPreExecute():主线程中执行,异步任务执行前调用,做一些准备工作
b、doInBackground(Params ... params):线程池中执行,用于执行异步任务,params为异步任务的输入参数。方法中可通过publishProgress方法,调用onProgressUpdate方法更新任务进度;返回计算结果给onPostExecute。
c、onProgressUpdate(Progress ... values):主线程执行,后台任务的执行进度发生改变时调用
d、onPostExecute(Result result):主线程执行,异步任务执行后调用。
e、onCanceled():
4)、使用new MyAsyncTask().execute(params)。
5)、条件:
a、该类在主线程中加载
b、对象在主线程中创建
c、executie方法在UI线程调用
d、不可调用内部的方法
e、一个对象只能调用一次execute方法
f、使用executeOnExecutor方法并行执行任务
6)、原理
3、HandlerThread:
1)、在run方法中创建消息队列并开启消息循环,从而允许在HandlerThread中创建Handler。
2)、由于在内部创建了消息队列,外界通过Handler的消息方式通知HandlerThread执行具体任务。
3)、当明确不需要再使用时,要使用quit或者quitSafely来退出run的无限循环。
4、IntentService:
1)、可执行后台耗时任务,完成后自动停止;由于是服务,所以具有更高的优先级,不易被系统杀死。
2)、封装了HandlerThread和Handler
3)、使用
a、onHandleInt()方法
二、Android中的线程池
1、线程池优点:
1)、重用线程池中的线程
2)、控制线程池的最大并发数,避免线程之间抢占资源导致的阻塞现象
3)、对线程简单管理,提供定时执行及指定间隔循环执行等功能
2、线程池的实现
1)、ThreadPoolExecutor
a、线程池中线程数未达到核心线程的数量,会启动一个核心线程执行任务
b、线程池中线程数已达到核心线程的数量,会将任务插入到任务队列中等待执行
c、如果任务队列已满,b中无法将任务插入到任务队列中,若此时线程数未达到最大线程的数量,会立刻启动一个非核心线程来执行任务
d、如线程数已达到最大线程的数量,会拒绝执行此任务
2)、AsyncTask中线程池的配置信息
a、核心线程数:CPU数+1
b、最大线程数:CPU数的2倍+1
c、核心线程无超时机制,非核心线程在闲置时超时时间1秒
d、任务队列容量128
3)、线程池的分类
a、FixedThreadPool
b、CachedThreadPool
c、ScheduleThreadPool
d、SingleThreadPool
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- 十一、Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池(一)
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android 的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android 的线程和线程池
- Android的线程和线程池
- Moc'ing qt1.h... 系统找不到指定的路径。 Project : error PRJ0019: 工具从"Moc'ing qt1.h..."
- Range——插入对象insertNode
- Serializable 和 Parcelable 两种序列化
- Eclipse使用Material Design步骤详解
- android 自定义View基础(2)
- Android的线程和线程池
- 数据库&MYSQL&JDBC
- mysql -uroot -proot tc -e "select * from merchandise limit 1"这个-E的命令作用是什么,用来什么什么的?
- java的常见异常与错误总结
- libuv学习笔记(2)
- LeetCode:Trapping Rain Water
- 没有到主机的路由
- mysql免密码登录, 及使用-e 参数执行sql脚本
- 云计算基本原理