android4异步任务多次重复执行不调用doInBackground的问题

 之前做了一个demo,其中有一个按键响应是一个异步任务执行类,出现了一个这样的bug:在第一次调用的时候是可以执行的,但是第二次执行的时候异步任务类是不调用doInBackground方法的,而且不报错顺利执行。

遍历互联网各种资料,在doInBackground进行了这样的操作:

Thread thread = new Thread(){ 

public void run(){

// 此处写入耗时操作
}
};
thread.start(); 

将耗时操作加入到这个新的线程中去后,便可以连续多次调用异步任务的doinbackground方法。

至于为什么,这要深入研究一下异步任务的运行机

重复点击按键时,会执行一个AsyncTask,在doIngBackground()中,去打开socket连接,完成相应的校验。如果多次点击

但通过debug发现,后面的AsyncTask并没有真正执行。原因是因为前面的Task阻塞在了校验上。

通过查阅Android文档得知,AsyncTask,是异步处理类。它会新生成一个线程去执行doInBackground。对外,开发者不能获取此线程的引用,就算获取到了,对于像socket连接或IO操作会导致阻塞的作业,强行interrupt线程并不能退出阻塞。

 

所以为避免之后生成的AsyncTask能够被正常执行,请记住:

不要阻塞doInBackground(),我们应该新建一个线程来完成可能导致阻塞的操作。

 

但是有一个问题,在调用start方法之后我并没有调用join方法,其中具体机制还需下一步研究

 

 

 

android4异步任务多次重复执行不调用doInBackground的问题,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。