Android ImageDownloader:在AsyncTask中下载图像时添加不确定的进度条

时间:2012-11-27 15:25:51

标签: android caching android-asynctask android-progressbar

我正在使用Gilles Debunne在Multithreading For Performance中描述的ImageDownloader,我想做一个简单的扩展。

我想为尚未下载的每个列表项添加一个不确定的ProgressBar。我现在主要通过以下方式进行设置:

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

具体来说,只要在postExecute()中设置了imageView的位图,我就会将进度条标记为不可见......就像这样:

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)

有没有人建议如何使这项工作?那就是:对于此代码确定给定位图是否设置的正确测试是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

为什么imageView在preExecute中为null,这意味着你为什么需要测试?好的,在您引用的博客中,它使用了对图像视图的弱引用。你在onPostExecute中测试它是否为null:

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

这种情况发生的唯一方法是,如果AsyncTask没有启动,但包含图像视图的Activity已经完成并从屏幕中移除,这是可能的,因此测试它是好的。如果为null,则应立即调用cancel。

downloadExrawable(例如位图)在preExecute中不存在,因为尚未下载。

您的测试:

if (this == bitmapDownloaderTask) {

似乎多余。什么时候不是bitmapDownloaderTask?

[编辑]但是为什么你需要测试imageview来显示进度条?为什么不在onPreExecute中显示它(如果没有取消)并将其隐藏在onPostExecute中?