繁体   English   中英

Android AsyncTask-如何运作?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM