AsyncTask,是android提供的輕量級(jí)的異步類(lèi),可以直接繼承AsyncTask,在類(lèi)中實(shí)現(xiàn)異步操作,并提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過(guò)接口實(shí)現(xiàn)UI進(jìn)度更新),最后反饋執(zhí)行的結(jié)果給UI主線程.
本文不分析AsyncTask的使用,它的使用教程網(wǎng)上一搜一大堆,本文主要分析它的內(nèi)部邏輯和實(shí)現(xiàn),它是怎么實(shí)現(xiàn)異步的,它是怎么處理多個(gè)任務(wù)的,是并發(fā)么??
一、線程任務(wù)的調(diào)度
在AsyncTask內(nèi)部會(huì)創(chuàng)建一個(gè)類(lèi)相關(guān)的線程池來(lái)管理要運(yùn)行的任務(wù),也就就是說(shuō)當(dāng)你調(diào)用了AsyncTask的execute()后,AsyncTask會(huì)把任務(wù)交給線程池,由線程池來(lái)管理創(chuàng)建Thread和運(yùn)行Therad。
在Android4.0版本中它內(nèi)部是有兩個(gè)線程池:SerialExecutor和ThreadPoolExecutor,SerialExecutor是串行的,ThreadPoolExecutor是并發(fā)的,而默認(rèn)的就是SerialExecutor的,所以你一個(gè)程序中如果用了好幾個(gè)AsyncTask你就得注意了:不要忘了換成并發(fā)的線程池執(zhí)行。下面演示一下,穿行的調(diào)度
1.一個(gè)簡(jiǎn)單的例子:可以看出他是一個(gè)個(gè)執(zhí)行的
代碼如下:
延伸閱讀
我想了解如何學(xué)習(xí) |