AsyncTask引发的一个问题:doInBackground()未及时执行
2015-09-06 23:03
232 查看
在公司实习时遇到一个很奇怪的问题,doInBackground()未及时执行,也就是它并没有在execute()调用之后马上执行,而是等待了很久才得以执行。
查资料了解到:因为是4.0平台,所以所有 的AsyncTask并不都会运行在单独的线程中,而是被SERIAL_EXECUTOR顺序的使用线程执行。因为我的应用中还有其他地方使用 AsyncTask,所以到网络取图片的AsyncTask也许会等待到其他任务都完成时才得以执行而不是调用executor()之后马上执行。
解决方法:要么直接使用Thread,要么创建一个单独的线程池 (Executors.newCachedThreadPool())。或者最简单的解法就是使用 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR),这样起码不用等到前面的都结束了再执行。
查资料了解到:因为是4.0平台,所以所有 的AsyncTask并不都会运行在单独的线程中,而是被SERIAL_EXECUTOR顺序的使用线程执行。因为我的应用中还有其他地方使用 AsyncTask,所以到网络取图片的AsyncTask也许会等待到其他任务都完成时才得以执行而不是调用executor()之后马上执行。
解决方法:要么直接使用Thread,要么创建一个单独的线程池 (Executors.newCachedThreadPool())。或者最简单的解法就是使用 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR),这样起码不用等到前面的都结束了再执行。
相关文章推荐
- Content://sms
- Python 系统管理利器Fabric
- java中static的使用
- lucene学习笔记01-目录
- 就这样开始吧
- AFNetWorking返回文本类型的问题
- python风味之list创建
- 四种简单的排序算法的php实现
- 【9-6】Centos学习笔记
- 带优先级的队列 - PHP实现
- [转]C#调用C++类(以COM组件的形式)
- Android SU
- 数据结构之---C语言实现直接插入排序
- android 开发原理与基础
- C语言变长数组data[0]【总结】
- mac 安装lua
- ViewPager
- vim常用命令总结
- 九月六号java小练习
- autoprefixer webstorm