簡體   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