StupidBeauty
Read times:592Posted at:Mon Mar 4 22:56:16 2013
- no title specified

AsyncTask.execute背后线程 的默认行为已经是串行的了,使用时要注意

从android的某个版本开始,通过AsyncTask.execute提交给后台线程运行的任务是由单个线程串行地执行了。

本座今天就体验了一下这个特点。

在当前这个安卓项目中 ,有两处用到了 AsyncTask 来与后台服务器进行交互 为此实现了两个AsyncTask子类。 这里把它们称作 Task1 和Task2

Task1的代码已经开发完毕,是正常工作的。Task2的代码未开发完毕。

在项目中 的某个流程里,首先会执行一个Task1。待它得到结果之后,根据结果 再执行一个Task2。

今天测试 时, 在测试得到Task1的结果之后(此时已经有一个Task2被代码自动启动了) ,操作界面回到上一步 ,想试试再次触发 一个新的Task1 这个时候发现Task1不管用了。

也就是说,第一次操作触发Task1的过程正常进行了,第二次再试着触发Task1的过程时,却没有正常进行。当然 ,这里本座已经检查确认代码里创建的是一个新的Task1实例,并且之前的Task1实例已经处于FINISHED状态了。

当本座到处找别人的勃客参考 (这个过程中了解到新版的AsyncTask.execute已经是串行的了) ,并且根据这些文章一遍遍地测试时,猛然发现后台服务器报告说自己收到了两次请求。一次是对应于Task1的,一次是对应于Task2的。于是 本座明白了,第一 次启动的Task2没有正常结束,导致后续的AsyncTask请求都被排队了。

具体的原因就是,第一 次的Task1执行结束之后,代码随后启动了一个Task2。这个Task2的doInBackground函数 一直阻塞在那里,并且会继续一直阻塞在那里。后面 再提交一个Task1, 就在队列里排着,并且会一直排下去。

当在代码里临时把启动Task2的代码注释掉之后,再测试就正常了。

未知美女

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4