Android中的线程和线程池
1个回答
展开全部
一、除了Thread外,扮演线程角色的还有:AsyncTask和IntentService,同时HandlerThread也扮演特殊的线程。
IntentService:内部采用HandlerThread来执行,像一个后台线程,同时是一个服务,不容易被系统杀死。
二、HandlerThread的run方法是一个无限循环
三、IntentService中任务是排队执行的
四、AsyncTask
1、Android1.6之前串行执行任务,1.6时候采用线程池里的并行,Android3.0开始又开始串行(为了避免并发错误),单任可以并行。
2、AsyncTask必须在UI线程调用(不过这个不是绝对的,和版本有关系,API 16之前,API 16到 22, API 22以后) 参考一
原因:内部有静态Handler,采用UI线程的Looper来处理消息,这就是为什么AsyncTask必须在UI线程调用,因为子线程默认没有Looper无法创建下面的Handler,程序会直接Crash
3、AsyncTask中有两个线程池和一个Handler,一个线程池用于任务排队,一个线程池用于真正的执行任务,InternalHandler用于将
执行环境从线程池切换到主线程
AsyncTask串行与并行
五、线程池
线程池中多余的线程是如何回收的
IntentService:内部采用HandlerThread来执行,像一个后台线程,同时是一个服务,不容易被系统杀死。
二、HandlerThread的run方法是一个无限循环
三、IntentService中任务是排队执行的
四、AsyncTask
1、Android1.6之前串行执行任务,1.6时候采用线程池里的并行,Android3.0开始又开始串行(为了避免并发错误),单任可以并行。
2、AsyncTask必须在UI线程调用(不过这个不是绝对的,和版本有关系,API 16之前,API 16到 22, API 22以后) 参考一
原因:内部有静态Handler,采用UI线程的Looper来处理消息,这就是为什么AsyncTask必须在UI线程调用,因为子线程默认没有Looper无法创建下面的Handler,程序会直接Crash
3、AsyncTask中有两个线程池和一个Handler,一个线程池用于任务排队,一个线程池用于真正的执行任务,InternalHandler用于将
执行环境从线程池切换到主线程
AsyncTask串行与并行
五、线程池
线程池中多余的线程是如何回收的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询