asyncTask了解简记

来源:互联网 发布:mysql优化查询速度 编辑:程序博客网 时间:2024/06/07 08:12

今天就在open上看了两个文章,一个是刚刚提到的“Android移动终端数据同步技术的一次了解”(http://blog.csdn.net/appleliguo/article/details/7460138)

还有一个是关于asyncTask的。

由于android应用时必须遵守单线程模型的原则:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则:1.不要阻塞UI线程2.确保只在UI线程中访问Android UI工具包。

那么为了不阻塞UI线程,我现在一般都用handle来解决,就是新启一个线程专门来处理一些需要更新UI的逻辑,但是缺陷有:

第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用程序的效率要低很多;第二,线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。


AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦。阅读AsyncTask的源码可知,AsyncTask是使用java.util.concurrent框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟,高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。

AsyncTask最佳实践和使用场景注意:

使用AsyncTask处理联网,播放大尺寸媒体文件等较为耗时的工作,不但执行效率高,也可以节省代码;

AsyncTask不能完全取代线程,在一些逻辑较为复杂或者需要在后台反复执行的逻辑就可能需要线程来实现了。
意思就是说逻辑较为简单且每次只执行单次的就可以使用,可以降低线程开发引起的复杂度


参考文档:

http://chengbs.iteye.com/blog/1151838
http://wang-peng1.iteye.com/blog/553066