[英]Android: how does the execute() method in AsyncTask work?
[英]Android AsyncTask - How does it work?
據我了解,線程通過共享資源(例如BlockingQueue)進行通信。 當正在等待從另一個線程接收消息的線程時,它將在訪問隊列時阻塞,而另一個線程放棄了鎖。
但是,在Android AsyncTask中,似乎UI線程(接收方)在等待來自其他線程的消息時不必阻塞。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
似乎在沒有阻止UI線程的情況下從任何地方調用了onProgressUpdate()回調。 我在哪里想念?
簡而言之:主線程從隊列執行任務,並在隊列為空時處於空閑狀態。 當AsyncTask
完成其后台工作時,它將任務放入主線程的隊列中。 該任務是調用onPostExecute(...)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.