Android线程和线程池

AsyncTask的原理和优缺点
(1).AsyncTask作用是在后台做耗时的网络操作,在主线程实时的更新UI
(2).AsyncTask是Handler和线程池的封装,必须在主线程创建,execute必须在主线程调用,且一次只能执行一个execute方法
(3).AsyncTask默认是串行执行的,在内部实现了一个串行的线程池,所用的请求必须串行的执行,中途不能再调用execute方法。scheduleNext()和一个双向队列
AsyncTask也可以实现并行的执行请求 executeOnExecutor,内部也提供了一个128个容量的阻塞队列的线程池。
优缺点:
优点:简单快捷,按照他的步骤就可以完成对复杂数据的加载
缺点:对于长时间的任务不适合用。
对于大量的异步请求,更新UI会很困难。
只有数量是128个阻塞队列。
HandlerThread的原理分析
HandlerThread是对Thread进行了封装,HandlerThread继承了Thread 重写了run()方法,在run()方法中对Looper进行了初始化,
Looper.prepare();Looper.loop(); 获取当前线程的looper并进行循环,在getLooper()中wait() 在run()方法中notifyAll(),这样就实现了线程间的通信,从而以说明了HandlerThread,一次只能处理一个请求,
优缺点:
优点:创建多个匿名的Thread会造成系统的资源浪费,使用HandlerThread对线程的重复利用,减少资源的浪费,
缺点:HandlerThread适合长时间在后台的任务,但是每个任务都是执行完成才能执行下一个任务,如果那个任务阻塞了,就会造成下面的请求也不能响应。
IntentServicede的原理分析
IntentService是Service的子类,内部封装了HandlerThread+Handler,子类实现父类的抽象方法,onHandleIntent(),执行完任务之后自己会将Service关闭。startOnCommand()中调用onStart()从而执行Handler,中间传的Intent都是Activity所传来的,用来接收参数来进行处理的。
IntentService中的请求时在分线程中进行的,可以进行耗时的操作,并且执行完操作之后通知UI自己就可以关闭当前任务。
优缺点:优点:可以在分线程中执行,能够进行耗时的操作,结束所有的任务之后还可以自己关闭当前的服务。
缺点:一直只能执行一个任务,一旦任务阻塞,导致服务一直在,占用资源不能被释放,也没有结果返回给主线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值