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