asyncTask.execute

Android.os.Build.VERSION_CODES.DONUT, this was changed to a pool of threads allowing multiple tasks to operate in parallel. After android.os.Build.VERSION_CODES.HONEYCOMB, it is planned to change this back to a single thread to avoid common application errors caused by parallel execution. If you truly want parallel execution, you can use the executeOnExecutor version of this method with THREAD_POOL_EXECUTOR; however, see commentary there for warnings on its use.

This method must be invoked on the UI thread.必须UI线程中调用

注意:这个函数让任务是以单线程队列方式或线程池队列方式运行,依赖于平台版本而有所不同。asyncTask首次引入时,这个函数会让任务以后台单线程串行方式执行。从android.os.Build.VERSION_CODES.DONUT(android

1.6)开始,它让允许任务在线程池中多任务并行执行。但在 android.os.Build.VERSION_CODES.HONEYCOMB(android

3.0)之后,它又该回去了,变成了单线程执行的模式,原因是多线程并行执行容易引发问题。如果你真想并行执行任务,你可以使用另外一个版本:使用THREAD_POOL_EXECUTOR参数的executeOnExecutor方法,但要注意使用警告提示

anyncTask.executeOnExecutor

This method is typically
used with THREAD_POOL_EXECUTOR to allow multiple tasks to run in
parallel on a pool of threads managed by AsyncTask, however you can also
use your own Executor for custom behavior.

Warning: Allowing multiple tasks to run in parallel from a thread pool
is generally not what one wants, because the order of their operation is
not defined. For example, if these tasks are used to modify any state
in common (such as writing a file due to a
button click), there are no guarantees on the order of the
modifications. Without careful work it is possible in rare cases for the
newer version of the data to be over-written by an older one, leading
to obscure data loss and stability issues. Such changes
are best executed in serial; to guarantee such work is serialized
regardless of platform version you can use this function with
SERIAL_EXECUTOR. 
This method must be invoked on the UI thread.
Parameters:
exec The executor to use. THREAD_POOL_EXECUTOR is available as a
convenient process-wide thread pool for tasks that are loosely coupled.

这个方法通常和THREAD_POOL_EXECUTOR一起使用,允许多个任务在由AsyncTask管理的线程池中并行执行,但是您你也可以使用自定义行为的Executor。

警告:因为执行操作顺序并未定义,通常情况下,允许多个任务在线程池中并行执行,其结果并非是你想要的。例如:这些任务都要去修改某个状态值(诸如点击按钮写文件),因为没有确定的修改顺序,旧的修改可能会覆盖新修改的版本内容,导致不稳定数据丢失而变成一个稳定的问题。因此这种任务最好是串行执行;确保这些任务串行执行而不依赖于平台版本的方法是,使用SERIAL_EXECUTOR

看了这篇文章,http://blog.csdn.net/hitlion2008/article/details/7983449, 讲的挺好

更多解释:http://blog.csdn.net/guolin_blog/article/details/11711405

http://www.cnblogs.com/fotransit/archive/2013/04/17/3025937.html

最新文章

  1. copy()之绝版应用
  2. 转:工具类之SpannableStringUtils(相信你会爱上它)
  3. java写hadoop全局排序
  4. android学习笔记53——自动朗读TTS
  5. server application error应用错误
  6. jquery 点击事件
  7. event的属性
  8. CH Round #51 - Shinrein祭 #1
  9. C# string的一些函数
  10. STL之vector(向量)
  11. 不用splitter控件 简单实现对mfc对话框的分割的方法
  12. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx
  13. oracle创建表空间自增长和创建用户
  14. Android 最简单的测试UI卡顿
  15. android studio 撤销和恢复
  16. Java的三大特性
  17. 20181115 python-第一章学习小结part1
  18. skynet记录7:第一个服务logger和第二个服务bootstrap
  19. Confluence 6 从关闭的连接中恢复
  20. 《Linux内核分析》第六周笔记 进程的描述和进程的创建

热门文章

  1. Hive学习笔记(二)
  2. html--元素显示优先级
  3. Leetcode3--->无重复字符的最长子串长度
  4. spring AOP详解〇
  5. IO Streams:格式化
  6. 【转】深入JVM系列(一)之内存模型与内存分配
  7. 【bzoj2225】[Spoj 2371]Another Longest Increasing CDQ分治+树状数组
  8. 【Luogu】P1411树(树形高精DP)
  9. HDU——1418抱歉(平面欧拉公式)
  10. JStorm源代码阅读——消息的确认机制