【转】 Pro Android学习笔记(九五):AsyncTask(4):执行情况
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/
两个AsyncTask对象的运行情况
我们看看唤起两个AsyncTask对象的执行情况:
private void testMultiMyLongTask(){
MyLongTask task1 = new MyLongTask(this, "Multi One");
task1.execute("MultiOne","my","dear","friends");
MyLongTask task2 = new MyLongTask(this, "Multi Two");
task2.execute("MultiTwo","hello","world");
}
初看这段代码,我们会想象着两个task的worker线程会先后几乎同时一起运行,然而实际的测试结果是,task2的worker线程在等待task1的worker线程执行完后才运行,图为运行结果。

出现这种情况,最合理的猜测就是这两个worker线程实际是同一线程,这也很容易在log中验证。

在Android的参考文档对此有解释:task从线程池中获取线程,Android的不同版本有不同的处理方式,在最早的版本是同一后台线程,后来改为允许多个task并行执行,而在HONEYCOMB之后又改回同一线程,避免并行执行引发的错误。
如果我们一定需要并行执行,就是用executeOnExecutor(Executor, Params...),如下:
private void testMultiMyLongTask(){
MyLongTask task1 = new MyLongTask(this, "Multi One");
task1.execute("MultiOne","my","dear","friends");
MyLongTask task2 = new MyLongTask(this, "Multi Two");
//task2.execute("MultiTwo","hello","world");
task2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"MultiTwo","hello","world");
}
执行情况如下:


多次执行的异常
如果我们创建了一个AsyncTask的对象,多次执行execute()会报错,如下图所示,一个对象只能运行一次worker线程。

相关小例子源代码可在Pro Android学习:AsyncTask小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(九五):AsyncTask(4):执行情况的更多相关文章
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
随机推荐
- jmeter-执行多个sql查询语句
1.添加jdbc connection(注意标红部分) 2.添加jdbc request 3.查看结果树
- linux下fifo,mq,shm
最近想为系统添加一个统计脚本,但是系统内的模块是有perl和java两种语言编写,且模块是通过crontab定时调用的,所以需要使用IPC传输信息. 第一个想到的是socket方式,感觉需要统一设定一 ...
- ZC_操作_not敲代码
1.javah 命令(路径为 项目的bin目录下),例如 : F:\ZC_Code_E\workspace__MyEclipse2013\JNIjw01\bin>javah jniZ.JNIjw ...
- ES使用中遇到的多种坑,以及解决方案
1.查询不到导致404报错 在使用get或者search进行查询获取文档的时候,如果没有结果会抛出404的异常. 我们当然不希望抛出异常,这时候就要使用ignore这个参数来忽略报错,ignore可以 ...
- Eclipse下建立简单JNI程序实现返回double类型
在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,ja ...
- 发现project项目打红色感叹号的一种解决方案
在window-preferences中的xml catalog中对打叉的dtd进行remove. 很有可能是包导错了,打开config build path然后将打红叉的文件进行remove.
- js 格式化时间日期函数小结3
function DateUtil(){}/***功能:格式化时间*示例:DateUtil.Format("yyyy/MM/dd","Thu Nov 9 20:30:37 ...
- JavaScript面向对象之Prototypes和继承
本文翻译自微软的牛人Scott Allen Prototypes and Inheritance in JavaScript ,本文对到底什么是Prototype和为什么通过Prototype能实现继 ...
- Java 子类实例化对象的过程
子类实例化是否会实例化父类? 不会.父类在子类实例化过程中是并没有被实例化,java中new子类没有实例化父类,只是调用父类的构造方法初始化了,子类从父类继承来的属性,这个调用是子类的对象调用的父类的 ...
- main函数的一点知识
main函数参数意义. main函数执行前. main还是执行后.