在Android中使用AsyncTask加载图像时不处理引用的实例
我仔细阅读了这里的文档,并使用本指南创建了一个ImageLoader,用于处理异步任务的并发性 我的代码几乎相同,尤其是下面的代码非常相同:在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
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是否为非空?是的。我检查了每一份参考资料,似乎一切都安排得很好。