[英]Wait for pending AsyncTask in android
我的應用程序中有一個ListView
,該ListView
每一行都需要從遠程資源中加載多個圖像。(即listview看起來像Instagram,其中每個項目至少包含一個圖像)。
我正在實現兩級緩存以改善負載映像體驗:
我的一級內存緩存的定義如下:
private Map<String, SoftReference<Bitmap>> l1ImageCache = new HashMap<String, SoftReference<Bitmap>>();
我可以在內存中保留圖像的一些SoftReference,以使應用程序查找更快。
我的二級文件緩存是SD卡或手機存儲上的文件夾。 我在其中保存一些已經下載的圖像的位置。 如果應用程序在內存緩存中找不到圖像,它將在文件目錄中查找。 如果映像文件存在,它將在本地加載文件,並將文件引用也放入內存緩存。
如果該應用程序無法從內存緩存或文件緩存中找到所需的圖像,它將使用ImageDownloadWorker
(擴展AsyncTask
)啟動線程並下載圖像。 但是,Android每個應用程序最多只能允許128個線程,我正在考慮一種節省一些線程的方法。 我創建了這個數據結構:
// keep all pending downloads
private HashMap<String, ImageDownloadWorker> downloadTaskMap = new HashMap<String, ImageDownloadWorker>();
其中的String字段將是要下載的URL。 這是為了檢查下載特定URL的線程是否已在運行,因此我不必啟動另一個線程來下載相同的內容。
我的問題是根據代碼,假設一種情況是應用程序將要下載圖像。 該映像既不在內存高速緩存中也不在已下載的文件文件夾中退出。 因此,應用程序檢查了downloadTaskMap
是否已經有一個線程下載該文件,因此不必為同一件事創建新的AsyncTask。 但是,如何在不阻塞主線程的情況下知道此待完成的下載任務何時完成? 如果我執行等待/通知或無限的while循環之類的操作,我想知道這是否會阻塞UI線程?
指針歡迎,謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.