在Android中使用AsyncTask加载图像时,instanceof无法处理引用

时间:2014-03-24 19:12:20

标签: android image reference android-asynctask

我仔细查看了这里的文档http://developer.android.com/training/displaying-bitmaps/process-bitmap.html,并使用本指南http://android-developers.blogspot.in/2010/07/multithreading-for-performance.html创建了一个处理AsynchTasks并发性的ImageLoader。

我的代码几乎相同,特别是我的代码完全相同:

private static BitmapDownloaderTask getBitmapDownloaderTask(ImageView imageView) {
    if (imageView != null) {
        Drawable drawable = imageView.getDrawable();
        if (drawable instanceof DownloadedDrawable) {
            DownloadedDrawable downloadedDrawable = (DownloadedDrawable)drawable;
            return downloadedDrawable.getBitmapDownloaderTask();
        }
    }
    return null;
}

问题在于条件

  

drawable instanceof DownloadedDrawable

永远不会被验证。一切看起来都不错,但drawable似乎不是我DownloadedDrawable课程的一个实例,我不知道为什么。你能救我吗?

编辑:我发现这与参考文献有关。实际上,imageView.getDrawable()返回一个具有BitmapDrawable引用的对象

android.graphics.drawable.BitmapDrawable@yyyyyyyy

如果我尝试将其强制转换为DownloadedDrawable对象(我的自定义子类的实例)或者在其上使用instanceof运算符,则会出现错误,因为使用DowanloadedDrawable引用访问该对象

my_package.image_loader.DownloadedDrawable@xxxxxxxx

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我强烈建议您跳过重新发明轮子进行图像下载。有很棒的开源库可以处理简单的下载,使您可以轻松管理磁盘和内存缓存。

我自己也在Picasso工作过,但也有UIL和其他一些你应该尝试的人。

两个库都将为您处理AdapterView回收并执行大量其他任务。