在Android中使用AsyncTask加载图像时不处理引用的实例

在Android中使用AsyncTask加载图像时不处理引用的实例,android,image,reference,android-asynctask,Android,Image,Reference,Android Asynctask,我仔细阅读了这里的文档,并使用本指南创建了一个ImageLoader,用于处理异步任务的并发性 我的代码几乎相同,尤其是下面的代码非常相同: private static BitmapDownloaderTask getBitmapDownloaderTask(ImageView imageView) { if (imageView != null) { Drawable drawable = imageView.getDrawable(); if (dr

我仔细阅读了这里的文档,并使用本指南创建了一个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
似乎不是我的
DownloadedDrawable
类的一个实例,我不知道为什么。你能帮我吗

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

android.graphics.drawable.BitmapDrawable@yyyyyyyy
如果我试图将其强制转换为可下载的Drawable对象(自定义子类的实例)或对其使用instanceof运算符,则会出现错误,因为该对象是通过DowanloadedDrawable引用访问的

my_package.image_loader.DownloadedDrawable@xxxxxxxx

如何解决这个问题?

我强烈建议您不要再重新发明图像下载的轮子。有很多很棒的开源库,它们可以处理简单的下载,让您管理磁盘和内存缓存变得非常容易

我自己也在努力,但也有一些和其他一些你应该尝试


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

drawable是否为非空?是的。我检查了每一份参考资料,似乎一切都安排得很好。