Android AsyncTask内部机制总结

1. AsyncTask内部还是用Handler(私有静态内部类的形式)实现通信,通过线程池管理执行后台任务(FutureTask会执行WorkerRunnable),WorkRunnable相当于后台线程任务,会拿来实例化线程对象,此线程一旦执行(其call()方法的执行,实际由FutureTask控制)会回调doInBackground()方法并把方法返回值作为消息Message的对象发送给Handler。FutureTask中封装了WorkRunnable,负责执行WorkRunnable任务(FutureTask中的done()方法会回调WorkRunnable中的call()方法);


2. Executor执行者负责把FutureTask封装成Runnable队列(会在其run()方法中调用FutureTask的done()方法)并依次取出递给线程池,而线程池ThreadPoolExecutor则负责用它来创建线程对象Thread进行执行(执行Runnable的run()方法);


3. 执行者负责维护任务队列,先进先取出,但线程池每次只执行一个任务,相当于单线程;


4. 在Handler的消息处理方法handleMessage()中,会根据条件判断是回调进度方法onProgressUpdate(),还是回调完成方法(包括任务执行完成的onPostExecute()方法或者取消任务的方法onCancel());


5. 一个任务只能执行一次,如果在执行时或者执行结束后再次调用execute()方法会抛异常;


6. AsyncTask的缺陷,在3.0以前,最大支持128个线程的并发,10个任务的等待。在3.0以后,无论有多少任务,都会在其内部单线程执行;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值