2012-11-27 82 views
0

我正在使用ImageDownloader,如Gilles Debunne在Multithreading For Performance中所述,我想做一個簡單的擴展。Android ImageDownloader:在AsyncTask中下載圖片時添加不確定的進度條

我想爲每個尚未下載的列表項添加不確定的ProgressBar。我把它大多成立至今,通過調用:

progressBar.setVisibility(View.VISIBLE); // in the AsyncTask preExecute() 
progressBar.setVisibility(View.INVISIBLE); // in the AsyncTask postExecute() 

具體來說,我標誌着進度條無形儘快的ImageView位在postExecute()設置...這樣的:

if (this == bitmapDownloaderTask) { 
    imageView.setImageBitmap(bitmap); 
    progBar.setVisibility(View.INVISIBLE); 
} 

但是我一直無法找到最初在preExecute()中顯示進度條的正確測試。我試過各種組合:

if (imageView == null) 
if (imageView.getDrawingCache() == null) 
if (downloadedDrawable == null) 
if (downloadedDrawable.getColor() == Color.BLACK) 

有沒有人有建議如何使這項工作?那就是:對於這個代碼來說,確定一個給定的位圖是否被設置的正確測試是什麼?謝謝!

回答

0

爲什麼會ImageView的是在preExecute空,這意味着你爲什麼需要測試?好的,在你引用的博客中,它使用了對圖像視圖的弱引用。您測試它是空像他那樣在onPostExecute:

 ImageView imageView = imageViewReference.get(); 
     if (imageView != null) { 

這可能發生的唯一方法是,如果的AsyncTask沒有開始,但包含圖像查看活動已完成,從屏幕上消失,這是可能的,所以測試它是很好的。如果它爲空,那麼你應該立即調用取消。

preExecute中的downloadedDrawable(例如位圖)不存在,因爲它尚未下載。

您的測試:

if (this == bitmapDownloaderTask) { 

似乎是多餘的。什麼時候它不會是bitmapDownloaderTask?

[編輯]但是,爲什麼你需要測試的ImageView顯示進度條?爲什麼不直接在onExExcute中顯示它(如果未取消)並將其隱藏在onPostExecute中?

+0

感謝您的回覆,但我沒有完全遵循。對於我應該用來在onPreExecute()中顯示進度條的條件,您有具體的建議嗎,然後將它隱藏在onPostExecute()中? – gcl1