LuckyHu Blog

Home MyGame MyApp About

AsyncTask延迟执行的原因

10 Oct 2011

这篇文章解决了我的问题,感谢。

在项目中使用AsyncTask来异步的请求网络连接,检查本地缓存和服务器的上数据是否一样时,发现在第一次执行一系列异步任务后,马上执行第二次,会发生延迟执行的情况。一开始怎么也搞不懂为什么,因为总觉得异步的东西应该是永远不会阻塞UI的,但是实际情况是(正如文章所说)AsyncTask是由一个线程池来管理的,当异步任务太多的时候,大于5个的异步任务就会被加入缓冲队列。这就是照成延迟的原因。

今早来寻求解决方法,我的异步任务都是连接网络,按道理我把网络关闭了,这些异步任务应该很快就执行完毕,也不会造成缓冲队列,但实际上延迟的时间还是蛮长的,有时候会达到20秒左右。今早我发现我在代码中经常在某个异步任务的doInBackground方法中开启令一个异步任务,我在想是不是这里的问题,于是我把所有新开启的异步任务都放到onPostExecute方法中,也就是在这个异步任务执行完成的时候再开启另一个。

延迟解决了。

虽然按照我的理解在哪个地方开启新的线程都是一样的,因为它总是异步的嘛,互相应该不会影响,但显然事实上是有影响的,在某个异步任务的执行过程中启动另外一个异步任务,会大大减慢这些任务的执行过程。等以后再慢慢研究为啥。