[英]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.