注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚天剑

青春要在奔跑中度过

 
 
 

日志

 
 
 
 

AsyncTask 原理剖析  

2013-08-07 23:21:39|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关于AsyncTask的用法,网上示例一大堆,但是,有一大堆的问题找不到答案。
最后还是看了Google的官方文档,自己又做了一堆的实验,才最终得出结论。
成果来自不易,希望能好好归纳总结,以免日后忘记,同时,也希望能给正在寻找这些问题答案的网友提供参考。

首先,AsyncTask有主要的回调方法:doInBackground,onProgressUpdate,onPostExecute,onPreExecute,
onCancelled。

问题:
1.AsyncTask实现了异步处理,那么,些方法是在后台线程中执行,哪些是在UI线程中执行呢?
2.cancel的实际效果?cancel的参数实际的影响?

结论:
1.doInBackground是在后台线程中执行,其他是在UI线程中执行。
谷歌官方说明文档有说到,也可以在每个回调方法中打印Thread.currentThread().getName(),都可以证实这一结论。
2.cancel如果在后台线程启动前执行,那么,后台线程将不会被启动,如果,后台线程启动后,回调onPostExecute之前执行,那么,将会导致后台线程执行完成后,回调onCancelled,cancel方法并不会直接调用onCancelled。cancel参数决定后台线程是否被中断,如果,为true则,后台线程中Thread.interrupted()返回值为true,如果睡眠状态,将会引发异常,和调用后台线程的interrupt方法,效果一致。
  评论这张
 
阅读(100)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017